Twig: разрешить HTML, но избежать сценария
Я расследую возможноеXSS
вектор атаки для моего приложения.
Что я имею:
FormType с однимtextarea
поле. Обычно это поле может содержатьhtml
теги.Twig
шаблон, который отображает вставленные данные.Я использую эту форму для вставки следующего содержания:
<b>Some valid HTML text</b>
<script type="text/javascript">alert("XSS")</script>
Просмотр этих данных потребует экранирования. Я знаком с несколькими стратегиями, когда дело доходит до экранирования данных.
1)raw
фильтр: полностью отключает экранирование -> вводит возможные XSS
2)e
фильтр:
html
выходы аромата:<b>Some valid HTML text</b> <script type="text/javascript">alert("XSS")</script>
js
выходы аромата:\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 }}
, выходы:Некоторый действительный текст HTML предупреждение ( "XSS")
Это работает, но почему-то мне это не нравится. Я скорее ищу решение для черного списка, а не для белого.
Теперь вопрос:
Есть ли какая-либо другая стратегия побега, которая позволяетhtml
теги, но избегает<script>
пометить какe("js")
фильтр делает?
Должен ли я "убить" скрипт во время отправки формы или во времяTwig
рендеринг?