Я изучаю возможный вектор атаки для своего приложения.Twig: Разрешить HTML-код, но избежать скрипта
Что у меня есть:
- 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-текст alert ("XSS")
Это работает, но мне как-то не нравится. Я скорее ищу решение черного списка, а не белый список.
Теперь вопрос:
Есть ли другая спасаясь стратегия, которая позволяет html
тегов, но ускользает <script>
тега как e("js")
фильтра делает?
Должен ли я «убить» скрипт во время отправки формы или во время рендеринга Twig
?
Да, я подумывал написать собственное решение :) Но, вопрос в том, достаточно ли это достаточно? –
Я немного поработал в поисковых системах, и это кажется «достаточно безопасным» :) Спасибо :) –
Эй, pcm! Просто хотел сказать вам, что я только реализовал свой собственный фильтр около недели назад. Работает красиво. Еще раз спасибо! :) –