Si tengo un recuadro donde la gente pone comentarios, y luego despliego ese comentario como este ... ¿debería escapar?¿Cuándo debo usar escape y safe en el sistema de plantillas de Django?
{{ c.title }}
Si tengo un recuadro donde la gente pone comentarios, y luego despliego ese comentario como este ... ¿debería escapar?¿Cuándo debo usar escape y safe en el sistema de plantillas de Django?
{{ c.title }}
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.
Sí! ¿Qué pasa si ingresaron <script>alert('boom');</script>
como título?
Django autoescape hace esto mucho más fácil.
Por lo tanto, debería escapar? ¿Qué tal "seguro"? – TIMEX
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:
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>
Ahhhhhhh. 'escapejs' era el que estaba buscando. No pude encontrar esto en ninguna parte – Sevenearths
¿Cuál es la diferencia entre {{c.title}} y {{c.title | escape}}, si Django ya escapa automáticamente? – TIMEX
Siempre se puede controlar el autoescaping con: {% autoescape en%} {{ cuerpo}} {% endautoescape%} Aquí el filtro de escape podría ser utilizado para escapar selectivamente – zsquare