Подтвердить что ты не робот

Существует ли определенная анти-XSS-библиотека для PHP?

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

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

4b9b3361

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

Изменить: Спасибо @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 для той или иной страницы. Это намного лучше, чтобы иметь возможность регистрироваться и винить, чем закрывать ваших пользователей.

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

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