XSS (межсайтовый скриптинг): что это и как защититься
Проверено экспертной редакцией SecRadar · по первоисточникам ФСТЭК / ФСБ / Банка России
XSS (Cross-Site Scripting, межсайтовый скриптинг) — атака, при которой злоумышленник внедряет вредоносный скрипт в веб-страницу, и этот скрипт исполняется в браузере жертвы, а не на сервере. Атака входит в категорию Injection рейтинга OWASP Top 10, делится на три типа — отражённый, хранимый и DOM-based, — и закрывается не одним продуктом, а комбинацией практик безопасной разработки и сетевой защиты.
Кратко
- XSS
- Внедрение вредоносного скрипта в веб-страницу, которое исполняется в браузере жертвы, а не на сервере приложения.
- Три типа
- Отражённый (reflected) — через ссылку с полезной нагрузкой; хранимый (stored) — скрипт сохранён на сервере; DOM-based — уязвимость целиком в клиентском коде.
- Последствия
- Кража сессионных cookie и токенов авторизации, действия от имени жертвы, подмена содержимого страницы.
- Категория OWASP
- Injection — A05 в действующей редакции OWASP Top 10:2025 (была A03:2021-Injection).
- Основная защита
- Экранирование вывода и Content Security Policy на уровне приложения; валидация ввода и WAF — дополнительные, не основные рубежи.
- Отличие от CSRF
- XSS выполняет код в браузере жертвы, CSRF лишь подделывает запрос от её имени вслепую — без доступа к содержимому ответа.
Что такое XSS
XSS (Cross-Site Scripting, межсайтовый скриптинг) — это атака на веб-приложение, при которой злоумышленник внедряет вредоносный JavaScript-код в страницу, и этот код выполняется в браузере другого пользователя, а не на сервере. Название «межсайтовый» исторически описывает сценарий, когда скрипт с одного источника получает доступ к содержимому и данным другого сайта в браузере жертвы, хотя на практике атака чаще происходит в рамках одного и того же уязвимого сайта.
Причина та же, что у большинства инъекционных атак, — недостаточная проверка и обработка пользовательского ввода: приложение выводит непроверенные данные (введённые пользователем или взятые из параметра URL) обратно в HTML-страницу, и браузер жертвы интерпретирует их не как обычный текст, а как исполняемый код. Атака возможна везде, где страница отображает данные, которые прошли через пользователя, — поле поиска, комментарий, параметр ссылки, HTTP-заголовок Referer.
Типы XSS
Три типа XSS различаются тем, откуда берётся вредоносный код и как он попадает в браузер жертвы — передаётся в самом запросе, хранится на сервере заранее или вообще не покидает клиентский код страницы.
↔ таблицу можно прокрутить вбок
| Тип | Откуда берётся код | Требует ли действия жертвы |
|---|---|---|
| Отражённый (reflected) | Передаётся в самом запросе — обычно в параметре ссылки — и сервер немедленно «отражает» его обратно в HTML-ответе без проверки | Да — переход по специально составленной ссылке, часто из фишингового письма или сообщения |
| Хранимый (stored, persistent) | Сохраняется на сервере — в комментарии, профиле пользователя, отзыве, поле формы — и отдаётся всем, кто откроет страницу с этим содержимым | Нет — достаточно открыть обычную страницу сайта, специальная ссылка не нужна |
| DOM-based | Уязвимость целиком в клиентском JavaScript-коде страницы: скрипт в браузере сам берёт непроверенные данные (например, из URL) и вставляет их в DOM, минуя сервер | Да — обычно переход по ссылке, но сервер при этом может быть полностью корректен |
Хранимый XSS считается самым опасным из трёх: он не требует специальной ссылки и превращает в жертву каждого, кто просто зашёл на заражённую страницу, — в отличие от отражённого, где атака работает только против того, кто перешёл по конкретной ссылке.
Последствия и пример атаки
Главное следствие успешной XSS-атаки — код атакующего получает те же права в браузере жертвы, что и легитимный скрипт страницы: доступ к содержимому DOM, к сессионным cookie (если они не защищены флагом HttpOnly), к данным, которые пользователь вводит в формы, и к самому интерфейсу страницы.
Учебный пример хранимого XSS — поле комментария, которое сайт выводит на страницу без экранирования HTML. Атакующий вместо обычного текста комментария отправляет:
Если приложение сохраняет этот текст как есть и выводит его на странице каждому посетителю, браузер каждого, кто откроет страницу с комментарием, выполнит этот код — и отправит cookie текущей сессии на сервер атакующего. Обладая сессионным cookie, атакующий может зайти на сайт под учётной записью жертвы без пароля.
Как защититься
Основная защита от XSS находится в коде приложения, а не в отдельном защитном продукте — это корректное экранирование вывода и Content Security Policy. Средства статического и динамического анализа кода помогают найти уязвимость до релиза, а сетевая защита снижает риск для уже опубликованного приложения, но не заменяет исправление в самом коде.
Экранирование вывода
Символы, которые браузер интерпретирует как разметку или код (<, >, кавычки), заменяются на безопасные HTML-сущности при каждом выводе непроверенных данных на страницу — независимо от того, откуда эти данные пришли.
Content Security Policy
CSP-заголовок ограничивает, какой код вообще может выполняться на странице — например, запрещает инлайн-скрипты и загрузку кода с недоверенных источников, снижая ущерб даже там, где экранирование где-то не сработало.
Валидация ввода
Проверка формата, длины и допустимых символов на входе — не замена экранирования, а дополнительный барьер до того, как данные вообще попадут в вывод страницы.
WAF
Web Application Firewall фильтрует известные паттерны XSS на уровне HTTP-трафика — полезный дополнительный рубеж, в том числе на время исправления уже найденной уязвимости, но не замена защиты внутри кода.
На портале класс WAF — основная техническая защита веб-приложений на сетевом уровне, включая фильтрацию XSS-паттернов в трафике. Найти уязвимость до того, как она попадёт в продакшн, помогают классы SAST — статический анализ исходного кода на предмет мест, где вывод не экранирован, — и DAST — динамический анализ уже работающего приложения, который пытается внедрить полезную нагрузку так же, как это сделал бы реальный атакующий.
Частые вопросы
Что такое XSS простыми словами?
Чем XSS отличается от CSRF?
Чем XSS отличается от SQL-инъекции?
Что такое хранимый XSS?
Может ли CSP полностью защитить от XSS?
В какую категорию OWASP Top 10 входит XSS?
Словарь терминов ИБ на SecRadar
XSS и другие атаки на веб-приложения — независимые разборы без привязки к вендору, с прямыми ссылками на классы СЗИ, которые закрывают конкретную угрозу.