Ramita: Permitir HTML, pero escapar script
Estoy investigando un posibleXSS
vector de ataque para mi aplicación.
Lo que tengo:
FormType con un solotextarea
campo. Normalmente este campo puede contenerhtml
EtiquetasTwig
plantilla que representa los datos insertados.Utilizo ese formulario para insertar el siguiente contenido:
<b>Some valid HTML text</b>
<script type="text/javascript">alert("XSS")</script>
Ver esos datos requeriría escapar. Estoy familiarizado con algunas estrategias cuando se trata de escapar de los datos.
1)raw
filtro: desactiva completamente el escape -> introduce posibles XSS
2)e
filtrar:
html
salidas de sabor:<b>Some valid HTML text</b> <script type="text/javascript">alert("XSS")</script>
js
salidas de sabor:\x3Cb\x3ESome\x20valid\x20HTML\x20text\x3C\x2Fb\x3E\x0D\x0A\x3Cscript\x20type\x3D\x22text\x2Fjavascript\x22\x3Ealert\x28\x22XSS\x22\x29\x3C\x2Fscript\x3E
3){{ var|striptags('<br>')|raw }}
, salidas:Algún texto HTML válido alerta ("XSS")
Este funciona, pero de alguna manera no me gusta. Estoy buscando una solución de lista negra, no una lista blanca.
Ahora la pregunta:
¿Hay alguna otra estrategia de escape que permitahtml
etiquetas pero escapa<script>
etiqueta comoe("js")
filtro hace?
¿Debo "matar" el script durante el envío del formulario o durante elTwig
¿representación?