номер
Оставляя в стороне тему разрешения некоторых тегов (на самом деле не в этом суть вопроса), HtmlEncode просто НЕ охватывает все атаки XSS.
Например, рассмотрим сгенерированный сервером javascript на стороне клиента - сервер динамически выводит htmlencoded значения непосредственно в javascript на стороне клиента, htmlencode не остановит выполнение сценария, внедренного в сценарий.
Далее рассмотрим следующий псевдокод:
<input value=<%= HtmlEncode(somevar) %> id=textbox>
Теперь, если это не сразу очевидно, если somevar (конечно, отправленный пользователем) установлен на
a onclick=alert(document.cookie)
результирующий вывод
<input value=a onclick=alert(document.cookie) id=textbox>
, который бы четко работал. Очевидно, что это может быть (почти) любой другой скрипт ... и HtmlEncode не сильно поможет.
Необходимо рассмотреть несколько дополнительных векторов ... включая третий вариант XSS, называемый XSS на основе DOM (в котором вредоносный скрипт динамически генерируется на клиенте, например, на основе # значений).
Также не забывайте об атаках типа UTF-7 - где атака выглядит как
+ADw-script+AD4-alert(document.cookie)+ADw-/script+AD4-
Ничего особенного там не закодировать ...
Конечно, решение (в дополнение к правильной и ограничительной проверке ввода в белый список) состоит в том, чтобы выполнить контекстно-зависимое кодирование : HtmlEncoding хорош, если вы выводите контекст IS или HTML вам нужно JavaScriptEncoding, или VBScriptEncoding, или AttributeValueEncoding, или ... и т. д.
Если вы используете MS ASP.NET, вы можете использовать их библиотеку Anti-XSS, которая предоставляет все необходимые методы кодирования контекста.
Обратите внимание, что все кодирование не должно ограничиваться пользовательским вводом, но также должно храниться в значениях из базы данных, текстовых файлов и т. Д.
Да, и не забудьте явно установить кодировку, как в заголовке HTTP, так и в теге META, иначе у вас все еще будут уязвимости UTF-7 ...
Еще немного информации и довольно точный список (постоянно обновляемый) смотрите в Шпаргалке RSnake: http://ha.ckers.org/xss.html