Фильтрация пользовательского ввода - нужно ли фильтровать HTML?


Примечание: Я забочусь о внедрении SQL и экранировании вывода в другом месте - этот вопрос касается только фильтрации ввода, спасибо.

Я занимаюсь рефакторингом своих функций фильтрации пользовательского ввода. Перед передачей параметра GET/POST фильтру определенного типа с помощью filter_var() я делаю следующее:

Теперь вопрос: все еще имеет смысл передавать параметр в фильтр, такой как HTMLAWED или Очиститель HTML, или я могу считать ввод безопасным? Мне кажется, что эти два отличаются в основном степенью детализации разрешенных HTML-элементов и атрибутов (которые я не интересует, так как я удаляю все), но в документах htmLawed есть раздел об "опасных символах", который предполагает, что может быть причина для его использования. В этом случае, какова была бы разумная конфигурация для этого?

Author: djn, 2010-02-21

2 answers

Существует множество различных подходов к XSS, которые являются безопасными. Единственная причина узнать, выдерживает ли ваш подход воду, - это проверить его эксплуатацию. Я рекомендую использовать Бесплатный сканер уязвимостей XSS* или открытый исходный код wapiti.

Честно говоря, я никогда не буду использовать strip_tags(), потому что вам не всегда нужны html-теги для выполнения javascript! Мне нравится htmlspecialchars($var,ENT_QUOTES); .

Например, это уязвимо для xss:

print('<A HREF="http://www.xssed.com/'.strip_tags($_REQUEST[xss]).'">link</a>');

Вам не нужно для выполнения javascript в этом случае, поскольку вы можете использовать onmouseover, вот пример атаки:

$_REQUEST[xss]='" onMouseOver="alert(/xss/)"';

ENT_QUOTES позаботится о двойных кавычках, которые исправят эту уязвимость XSS.

*Я связан с этим сайтом/сервисом.

 2
Author: rook, 2011-12-31 23:24:36

Я думаю, что то, что вы делаете, безопасно, по крайней мере, с моей точки зрения, никакой html-код не должен проходить через ваш фильтр

 0
Author: Gabriel, 2010-02-21 09:49:40