люди взламывают мой фильтр - PullRequest
0 голосов
/ 24 января 2011

Я использую регулярное выражение и блокирую слова document | window | alert | onmouseover | onclick для предотвращения xss, и люди, кажется, могут обойти его, просто набрав документ, как мне это исправить?

спасибо!

-

edit: как насчет предотвращения использования сервера xss?Может быть, отказаться от обслуживания любого файла, который содержит вещи в переменной GET?

Ответы [ 4 ]

4 голосов
/ 24 января 2011

Очевидно, что вам нужно будет предоставить некоторые значимые детали, чтобы получить серьезный ответ на вашу проблему под рукой.

Как отмечает @David Dorward, самый простой вариант - избежать всех сущностей HTML.Это отключает весь HTML, но вам не приходится сталкиваться с тяжелым положением борьбы с XSS-атаками.

Если вам требуется поддержка HTML, рассмотрите возможность использования готового анти-XSS-фильтра, такого как Очиститель HTML , который обещает надежно блокировать такие попытки.

HTMLPurifier - это стандартная библиотека HTML-фильтров, написанная на PHP.HTML Purifier не только удалит весь вредоносный код (более известный как XSS) с тщательно проверенным, безопасным, но разрешающим белым списком, но также обеспечит соответствие ваших документов стандартам, чего можно достичь только при полном знании спецификаций W3C.

1 голос
/ 24 января 2011

Простой вариант - запретить любой HTML и преобразовать все &, < и > в соответствующие им объекты (&amp;, &lt; и &gt;).

Более сложный подход состоит в том, чтобы запустить ввод через анализатор HTML, применить белый список к именам элементов и атрибутов, а затем сериализовать его обратно в HTML.

0 голосов
/ 24 января 2011

У меня была такая же проблема, и я задал вопрос только вчера. Лично вместо удаления тегов я создал список всех тегов, которые я хотел. Использование команды PHP strip_tags - это то, что я использую сейчас.

strip_tags (строка $ str [, строка $ allowable_tags])

Используя эту команду, вы можете просто применить ее к своему фильтру следующим образом.

Введенный текст:

<b>Hi</b><malicious tag>

strip_tags("<b>Hi</b><malicious tag>","<b>")

Это выдаст <b>Hi</b>.

0 голосов
/ 24 января 2011

Является ли эта система вообще важной / критической?

Если это так, немедленно отключите ее и наймите консультанта по безопасности, чтобы обеспечить ее для вас.

Безопасность трудная проблема.Не думайте, что вы можете сделать это правильно с первого раза, потому что вы этого не сделаете.

Если это просто система, с которой вы играете?

Попытка остановить XSS с помощью фильтрации определенных словпроигрышная битва.Если вы не хотите вставлять HTML, просто закодируйте HTML все .Если вам нужен HTML, вам нужно проанализировать HTML, убедиться, что он действителен и не собирается ломать страницу, и только после этого убедиться, что он не работает.содержат любые элементы или атрибуты, которые вам не нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...