Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Cómo prevenir XSS en Symfony

9 de marzo de 2015

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

#1

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

10 marzo 2015, 8:37
#2

¡Muchas gracias por la respuesta! Voy a probarlo de inmediato

@SakyaStelios

10 marzo 2015, 15:35