Hola a todos.
Tengo una duda. Quisiera saber como prevenir el XSS o Cross-site scripting cuando muestro datos que traen código. Tengo un <textarea>
donde le he añadido el plugin TinyMCE, para formatear datos (por ejemplo, negrita, cursiva, etc). Luego, en vista, lo muestro con el filtro raw
de Twig:
{{ miArticulo.contenido|raw }}
El problema es que cuando en el <textarea>
con tynyMCE escribo código Javascript, por ejemplo un alert()
, se ejecuta en el navegador.
Quisiera saber cómo permitiría mostrar solo etiquetas seguras de HTML. Intenté rodear la variable mostrada con la etiqueta escape, de Twig:
{% autoescape 'html' %}{{ miArticulo.contenido|raw }}{% endautoescape %}
...pero me sigue mostrando todo el JavaScript que escribo. ¿Hay alguna alternativa para hacerlo con Twig, o debería usar alguna librería, como HTMLPurifier?
Respuestas
La solución más sencilla en este caso consiste en usar el filtro striptags de Twig que internamente usa la función strip_tags de PHP. Así que solo tienes que indicar las etiquetas HTML seguras como argumento del filtro y listo:
{{ miArticulo.contenido|striptags('<strong><em><a><ul><ol><li>')|raw }}
@javiereguiluz
¡Muchas gracias por la respuesta! Voy a probarlo de inmediato
@SakyaStelios