<script> теги - оставит ли / создаст пробел (<script>) уменьшение угрозы XSS? - PullRequest
2 голосов
/ 21 октября 2011

Я создаю виджет чата для своего веб-сайта. Пользователи смогут вводить простой текст - без HTML.

В попытке исключить теги HTML И , чтобы позволить пользователям использовать "<" и ">", я беру их данные и очищаю их с помощью strip_tags () на входе и htmlentities () на вывод на экраны пользователей --- используя php. Одна из проблем заключается в том, что если пользователь введет «Россия <Китай», strip_tags () будет жадно удалять все после «<». </p>

Мой вопрос ... если я использую регулярное выражение, чтобы создать пробел между "<" и следующим непробельным символом, это поможет мне устранить угрозу XSS? Помешает ли это потенциальному HTML-тегу отображаться на экране пользователя? </p>

Скажите, если что-то подобное проскальзывает:

alert ('некоторый вредоносный код');

Одним из преимуществ при создании этого пространства (например, ), по-видимому, является то, что strip_tags () оставляет "<" в покое. </p>

Спасибо за любые предложения.

Ответы [ 2 ]

4 голосов
/ 21 октября 2011

Добавленного пространства достаточно, чтобы теги не удалялись strip_tags, и не отображались как HTML браузерами .

Но в какой момент вы бы точно использовали такойрегулярное выражение?Если вы добавите его после того, как сделали strip_tags(), допустимый текст уже будет удален.Если вы добавите его до strip_tags(), тегов для удаления не останется, поэтому пользователи будут видеть размеченные теги HTML в тексте.

Но если они все равно будут видеть (искалеченные) тегизачем ты вообще это делаешь?Вы можете просто сделать htmlspecialchars(), что вы должны сделать в любом случае.

Даже анализатор HTML не поможет вам, потому что анализатор HTML будет учитывать <China вв вашем примере тоже есть тег.

А человек, печатающий a<b, делает сравнение, говорит о HTML, пытается добавить акцент или пытается внедрить вредоносный скрипт?

2 голосов
/ 21 октября 2011

Просто используйте htmlspecialchars () .Это единственная функция, которая вам нужна для очистки HTML.Угрозы XSS стираются, если вы используете их разумно.Следуйте этому с помощью nl2br, если вы хотите отобразить несколько строк, в противном случае текст будет отображаться в одной строке.

strip_tags равно никогда, никогда, никогда правильная функция санитарная обработка HTML.В лучшем случае он будет есть или искажать определенный действительный текст.В худшем случае, если используется параметр allow_tags, он ничего не очищает, поскольку атрибуты сохраняются.Это также не мешает объектам HTML.

...