XSS (англ. Сross Site Sсriрting — «межсайтовый скриптинг») — тип уязвимости компьютерной системы, используется при хакерской атаке. Специфика подобных атак заключается в том, что вместо непосредственной атаки сервера, они используют уязвимый сервер в качестве средства атаки на клиента. XSS-атака обычно проводится путём конструирования специального URL, который атакующий предъявляет своей жертве. Иногда для термина используют сокращение «CSS», но чтобы не было путаницы с каскадными таблицами стилей, используют сокращение «XSS».
Условно XSS можно разделить на активные и пассивные:
-Пассивные XSS подразумевают, что скрипт не хранится на сервере уязвимого сайта, либо он не может автоматически выполниться в браузере жертвы. Для срабатывания пассивной XSS, требуется некое дополнительное действие, которое должен выполнить браузер жертвы (например клик по специально сформированной ссылке). Их также называют первым типом XSS.
-При активных XSS вредоносный скрипт хранится на сервере, и срабатывает в браузере жертвы, при открытии какой-либо страницы зараженного сайта. Их также называют вторым типом XSS.
-Часто в отдельный тип выделяют межсайтовый скриптинг через DOM, являющийся пассивным, но использующим уязвимости в клиентских скриптах. Его так же называют третьим или нулевым типом.
Сейчас XSS составляют около 15 % всех обнаруженных уязвимостей. Долгое время программисты не уделяли им должного внимания, считая их неопасными. Однако, это мнение ошибочно: в некоторых случаях с помощью XSS удаётся получить идентификатор сессии администратора или организовать DdOS атаку.
Примеры:
Основной целью активных XSS атак являются форумы, блоги, гостевые книги и социальные сети. Основные виды уязвимостей в них перечислены ниже.
Отсутствие фильтрации html тегов в сообщениях пользователей
Некоторые форумы позволяют пользователю использовать html теги для форматирования текста. Если отсутствует должный уровень фильтрации, злонамеренный пользователь может вставить такие теги, как <script> и <iframe> так, что HTTP-Cookie пользователей и администраторов, открывших некоторую тему форума, будут отправлены хакеру, или незаметно открыть произвольную ссылку в контексте браузера пользователя.
Для защиты от этого вида атак следует удалить все теги, кроме входящих в белый список.
Отсутствие фильтрации атрибутов и их значений разрешённых тегов
Данная уязвимость, в отличие от предыдущей, не специфична для html форматирования сообщений пользователя. Наиболее ярким примером её является тег img. Хакер может указать в качестве адреса сервер, имеющий узкий интернет канал, парализуя его работу большим количеством запросов, или устроить с его помощью XSRF атаку. Также хакер может указать атрибут onmouseover и выполнить произвольный javascript код.
В качестве примера подобной уязвимости можно рассмотреть уязвимость в известном форумном движке phpBB за 2002 год. Используя эту уязвимость, хакер может закрыть атрибут src и открыть onmouseover, вызывающий вредоносный код.
Для защиты от уязвимостей данного типа требуется жёсткая фильтрация, как названий атрибутов, так и их значений. Также следует запретить использование протоколов javascript: и data: во всех ссылках.
Подмена кодировки в заголовке страницы
Современные браузеры пытаются определить кодировку страницы на ходу и интерпретируют html в соответствии с этой кодировкой. В случае, если тег title расположен до тега meta и заполняется пользовательскими данными, хакер может вставить злокачественный html код в UTF-7 кодировке, обойдя таким образом фильтрацию таких символов, как < и ".
Для защиты от данной уязвимости следует явно указывать кодировку страницы до каких-либо пользовательских данных.
Другие примеры
Существует также возможность обхода фильтра javascript через пользовательскую flash анимацию.
Доступно только для пользователей