Twig: Permitir HTML, mas escapar de script
Estou investigando uma possívelXSS
vetor de ataque para o meu aplicativo.
O que eu tenho:
FormType com um únicotextarea
campo. Normalmente este campo pode conterhtml
Tag.Twig
modelo que renderiza os dados inseridos.Eu uso esse formulário para inserir o seguinte conteúdo:
<b>Some valid HTML text</b>
<script type="text/javascript">alert("XSS")</script>
A visualização desses dados exigiria escape. Eu estou familiarizado com poucas estratégias quando se trata de escapar dos dados.
1)raw
filter: Desativa completamente o escape -> introduz possíveis XSS
2)e
filtro:
html
saídas de sabor:<b>Some valid HTML text</b> <script type="text/javascript">alert("XSS")</script>
js
saídas 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 }}
, saídas:Algum texto HTML válido alerta ("XSS")
Este funciona, mas de alguma forma eu não gosto. Estou procurando uma solução da lista negra, não da lista branca.
Agora a pergunta:
Existe alguma outra estratégia de fuga que permitahtml
tags, mas escapa<script>
marcar comoe("js")
filtro faz?
Devo "matar" o script durante o envio do formulário ou durante oTwig
Renderização?