Есть ли определенная анти-XSS библиотека для PHP? - PullRequest
19 голосов
/ 20 октября 2010

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

Я видел пару библиотек, но большинство из них очень неполные, неэффективные или имеют лицензию GPL (когда вы, ребята, узнаете, что GPL не подходит для обмена небольшими библиотеками! Используйте MIT)

Ответы [ 7 ]

17 голосов
/ 20 октября 2010

OWASP предлагает библиотеку кодирования, на которую было потрачено время для обработки различных случаев.

устарел: http://www.owasp.org/index.php/Category:OWASP_Encoding_Project

Сейчас на http://code.google.com/p/reform/
и библиотека OWASP antiXSS находится по адресу: http://code.google.com/p/php-antixss/

7 голосов
/ 20 октября 2010

htmlspecialchars() - единственная функция, о которой вы должны знать.

4 голосов
/ 20 октября 2010

HTMLPurifier - это самый лучший вариант для очистки ввода HTML, и htmlspecialchars следует применять к чему-либо еще.

Но уязвимости XSS не следует удалять , поскольку любые такие представления являются мусоромтем не мение.Скорее сделайте ваше приложение залогом и напишите запись в журнале.Лучший набор фильтров для достижения обнаружения XSS - в основных правилах mod_security .

Я использую незаметное, но довольно тщательное обнаружение атрибутов здесь в new input () см. _xss метод.

3 голосов
/ 20 октября 2010

Редактировать: Спасибо @mario за указание, что все зависит от контекста .Там действительно нет супер способ , чтобы предотвратить все это на все случаи жизни.Вы должны отрегулировать соответственно.


Редактировать: Я исправлен и очень благодарен за поддержку @bobince и @ Rook по этому вопросу.Теперь мне совершенно ясно, что strip_tags никак не предотвратит атаки XSS .

Я отсканировал весь свой код, прежде чем ответить, чтобы узнать, был ли я каким-либо образомразоблачен и все хорошо из-за htmlentities($a, ENT_QUOTES), который я использовал в основном для работы с W3C.

Тем не менее, я обновил функцию ниже, чтобы немного подражать той, которую я использую.Я до сих пор считаю, что strip_tags приятно иметь до htmlentities, так что когда пользователь пытается ввести теги, он не будет загрязнять конечный результат.Скажите, что пользователь ввел: <b>ok!</b> гораздо лучше показать его как ok!, чем распечатывать преобразованные полнотекстовые htmlentities.

Спасибо вам обоим за то, что нашли время ответить и объяснить.


Если это исходит от пользователя интернета:

// the text should not carry tags in the first place
function clean_up($text) {
    return htmlentities(strip_tags($text), ENT_QUOTES, 'UTF-8');
}

Если оно исходит из бэк-офиса ... не надо.

Есть совершенно веские причины, по которым кому-то в компании может понадобиться JavaScript для той или иной страницы.Намного лучше иметь возможность регистрироваться и обвинять, чем закрывать своих пользователей.

1 голос
/ 20 октября 2010

В дополнение к ответу zerkms , если вы обнаружите, что вам нужно принять HTML, отправленный пользователем (например, из редактора WYSIWYG), вам потребуется использовать анализатор HTML, чтобы определить, что может и может: не будет представлено.

Я использую и рекомендую Очиститель HTML .

Примечание: Даже даже не пытайтесь использовать регулярное выражение:)

1 голос
/ 20 октября 2010

Мне нравится htmlpurifier отлично, но я вижу, как это может быть неэффективно, поскольку оно довольно большое.Кроме того, это LGPL, и я не знаю, подпадает ли это под ваш запрет GPL.

0 голосов
/ 26 сентября 2012

Я удивлен, что здесь не упоминалось, но я предпочитаю htmlAwed htmlPurifier. Он современный, хорошо лицензированный, очень маленький и очень быстрый.

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