XSS и HTML

html теги

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

Единственный оставшийся путь — разрешать HTML, но фильтровать в нем все конструкции, подозрительные с точки зрения XSS-уязвимости.

Такая фильтрация довольно сложна, ее сложность усугубляется тем, что браузеры допускают значительные вольности при написании HTML-разметки, стилей и скриптов, могут прощать отсутствующие или незакрытые кавычки, кодированные различными алгоритмами символы, лишние пробельные символы и пр. В качестве иллюстрации рекомендую ознакомиться с памяткой по различным способам XSS-атак на сайте ha.ckers.org.

Поэтому чистить HTML от вредоносных конструкций следует в несколько этапов, и первый их них — исправление ошибок синтаксиса. Для этого можно воспользоваться, к примеру, валидатором Tidy. Он расставит отсутствующие кавычки, "проэскейпит" содержащиеся в атрибутах спецсимволы вроде угловых скобок, закроет назакрытые теги, перенесет в секцию <head> (которую мы просто отрежем) все, что не имеет права находиться в <body> и т. д.

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

Кроме чисто скриптовых конструкций стоит запретить абсолютное позиционирование в стилях, чтобы не было возможности наложить поддельные кнопки и формы поверх настоящих.

Полная же задача определения потенциальной зловредности того или иного текста, как уже упоминалась, довольно громоздка, возможно, я опишу ее отдельной статьей или скриптом. Отдельно упомяну, что XSS-атаку можно провести через вставленный Flash-ролик, для запрета роликам вызывать JavaScript-команды используйте атрибут AllowScriptAccess тега <embed>:
<embed AllowScriptAccess='never' ... type="application/x-shockwave-flash"></embed>

Проследить за тем, чтобы не использовались иные type, тоже полезно.

Встретил упоминание о XSS через PNG с дописанным в конец текстом в MSIE. Будем надеяться, что оно пропатчено.


Источник: http://www.captcha.ru

Рекомендуем



XSS и BB-коды Всем этим мы добъемся того, что наш фильтр будет правильно работать и в случае появления поддержки в браузерах каких-то конструкций, которых, возможно, еще и в проекте нет


XSS и UTF-7 Отдельно стоит упомянуть использование для XSS-атаки скриптов, написанных в кодировке UTF-7


XSS Зачастую, все-таки надо предоставить пользователю возможность как-то оформлять свои сообщения: выделять цитаты, менять шрифты, раскрашивать тексты разным цветом, вставлять картинки и таблички, как, к примеру, сделано на LiveJournal