2010-10-30 9 views

Respuesta

14

En realidad, depende. El motor de plantillas de Django escapa automáticamente, por lo que realmente no necesitas escapar.

Si agrega el filtro de plantilla "seguro" como {{c.title|safe}}, entonces debe preocuparse por cosas como la inyección html, porque "seguro" marca la cadena como tal y significa que no se escapará.

También hay una etiqueta de plantilla {% autoescape en%} ... {% endautoescape%}, donde "on" se puede cambiar a "off", si es necesario. Por defecto está activado y la etiqueta no es necesaria.

Es posible que otros motores de plantillas no escapen por defecto, Jinja2 es uno de ellos.

+0

¿Cuál es la diferencia entre {{c.title}} y {{c.title | escape}}, si Django ya escapa automáticamente? – TIMEX

+2

Siempre se puede controlar el autoescaping con: {% autoescape en%} {{ cuerpo}} {% endautoescape%} Aquí el filtro de escape podría ser utilizado para escapar selectivamente – zsquare

2

Sí! ¿Qué pasa si ingresaron <script>alert('boom');</script> como título?

Django autoescape hace esto mucho más fácil.

+0

Por lo tanto, debería escapar? ¿Qué tal "seguro"? – TIMEX

1

Auto-escaping está activado por defecto en las plantillas django, por lo que no necesita utilizar escape. Safe se usa cuando desea apagarlo y le permite al sistema de representación de la plantilla saber que su fecha es segura en una forma no escapada. Consulte la documentación de Django para más detalles:

3

HTML auto-escape está activado por defecto, por lo que no es necesario para escapar de forma manual en la mayoría de los casos, pero no todos !

Dumping el contenido de una variable dentro de un elemento HTML está muy bien:

<p>{{ variable }}</p> 

Django escapará automáticamente los caracteres <, >, &, " y ', que es lo que se necesita aquí.

También está bien para volcar una variable dentro de un atributo, ya que " y ' son ambos escaparon, pero asegúrese de que no olvide incluir cotizaciones, como espacios no se escaparon:

<span class="{{ variable }}">...</span> <!-- Good --> 
<span class={{ variable }}>...</span> <!-- Bad --> 

Si desea utilizar una cadena dentro de Javascript en línea, debe usar el filtro escapejs, y no olvide las comillas. Esto protege tanto contra escapar de las cotizaciones para la variable de Javascript, y escapar de la etiqueta <script> usando </script>:

<script> 
    var value = "{{ variable|escapejs }}"; 
</script> 
+0

Ahhhhhhh. 'escapejs' era el que estaba buscando. No pude encontrar esto en ninguna parte – Sevenearths

Cuestiones relacionadas