Как избежать уязвимостей XSS - белый список? - PullRequest
3 голосов
/ 18 сентября 2009

Каковы лучшие методы предотвращения уязвимостей XSS?

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

Каковы наилучшие (хотя, возможно, более трудоемкие, чем белый список регулярных выражений) способы избежать этих уязвимостей / дезинфицировать пользовательский ввод? Возможно ли даже теоретически полностью санировать пользовательский ввод?

Ответы [ 3 ]

4 голосов
/ 18 сентября 2009

Взгляните на библиотеку AntiXSS .

2 голосов
/ 12 августа 2010

Ответ Михаэля в порядке, но он заблокирует как безопасный HTML, так и опасный ввод. Это означает, что любой ввод, содержащий HTML-форматирование, например , будет отображаться с фактическим HTML-кодом.

Если вы хотите принять безопасный HTML, но блокировать / фильтровать опасные входные данные, используйте проверенную и проверенную библиотеку фильтрации XSS сторонних производителей, например HTMLPurifier: http://htmlpurifier.org/

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

0 голосов
/ 03 октября 2009

Лучший способ фильтрации XSS зависит от того, для какой платформы вы разрабатываете. Регулярные выражения могут быть полезны для предотвращения многих типов уязвимостей, но не всегда являются лучшими. Лучший способ предотвратить XSS в PHP - использовать htmlspeicalchars(); Например:

Светоотражающий XSS:

print $_GET['xss'];

Исправленный:

print htmlspecialchars($_GET['xss'],ENT_QUOTES);

Чтобы проверить это, мы можем попробовать выполнить JavaScript http://127.0.0.1/xss.php?xss=<script>alert(/xss/)</script> В первом примере мы получим всплывающее окно с надписью / xss /. В пропатченном примере будет отображена html безопасная версия строки: предупреждение (/ XSS /)

Реальная проблема больше, чем < и меньше, чем > символов, если они заменены на &lt; и &gt; соответственно, тогда вы в безопасности от XSS.

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