Главная / База знаний / Словарь терминов / XSS: межсайтовый скриптинг простыми словами

XSS: межсайтовый скриптинг простыми словами

Словарь терминов 3 мин чтения Обновлено 27.07.2026
Что такое XSS и почему это дыра не в сервере, а в выводе данных. Чем грозит бизнесу и позициям, как находка выглядит в отчёте Shield и как её закрыть.

XSS (cross-site scripting, межсайтовый скриптинг) — это когда посторонний добивается, чтобы на страницах вашего сайта в браузере посетителя выполнился его код. Уязвимость не в сервере, а в том, как сайт показывает данные, пришедшие извне: из адреса, формы, комментария или профиля.

Аналогия для владельца сайта

Представьте доску объявлений у входа в магазин. Если кто-то принесёт записку «выдайте предъявителю ключи от кассы», а вы повесите её не читая — сотрудник выполнит чужую инструкцию как вашу. XSS устроен так же: сайт вставляет чужой текст в страницу как свой, а браузер выполняет всё, что там оказалось, с полным доверием к вашему домену.

Какие бывают разновидности

ВидГде живётКого затрагивает
ОтражённыйЗначение из адреса или формы возвращается прямо в HTML ответаТого, кто перешёл по подготовленной ссылке
ХранимыйЧужой текст сохранился в базе — комментарий, отзыв, имя профиляКаждого, кто откроет эту страницу
DOM-basedСкрипты сайта сами подставляют данные из адреса в разметкуПосетителей, при этом в ответе сервера следов не видно

Чем это грозит

  • Угон сессий. Чужой скрипт читает cookie и заходит в кабинет или админку от имени пользователя.
  • Спам и скрытые ссылки. Сайт начинает продвигать посторонние темы и теряет доверие поиска.
  • Метка в браузере и выдаче. Если через дыру внедрили вредоносный код, домен попадает в базы небезопасных сайтов, посетитель видит предупреждение «этот сайт может нанести вред», а страницы выпадают из индекса.

Как это выглядит в отчёте Security Shield

Сканер подставляет в параметры страниц безобидный маркер и смотрит, вернётся ли он в HTML без экранирования. Если вернулся — появляется находка «Признак отражённого XSS»: средняя серьёзность, класс CWE-79, категория OWASP A03:2021. Пометка «требует проверки» означает, что сервис видит поверхность, но не эксплуатирует её.

Активные пробы идут только в платных режимах и на подтверждённом домене — быстрая бесплатная проверка их не делает. Что ещё проверяется — в статье про Security Shield.

Что делать с находкой

Откройте адрес и параметр из строки «Где найдено» и попросите разработчика проверить, экранируется ли это значение при выводе. Отражение сырого значения в HTML — сигнал, что фильтра здесь нет.

Как закрыть

  1. Экранируйте вывод. Данные от пользователя перед вставкой в HTML проходят контекстное кодирование: <, >, кавычки и амперсанд превращаются в безопасные последовательности. В шаблонизаторах это одна настройка.
  2. Проверяйте, что пришло. Если параметр — число, принимайте только число. Для текстов с разметкой берите проверенную библиотеку очистки HTML.
  3. Включите CSP — даже при промахе в шаблоне она не даст выполниться постороннему скрипту. С чего начать, описано в статье про заголовки безопасности.
  4. Закройте cookie флагами HttpOnly и Secure, чтобы сессию нельзя было прочитать из JavaScript.
  5. Обновите CMS, тему и плагины. Большая часть XSS на типовых сайтах приходит из чужого расширения.

Как не допустить повторно

Правило простое: каждое новое поле, которое видит посетитель, проходит через тот же безопасный вывод, что и остальные. Держите CSP включённой, повторяйте скан после релизов и установки плагинов. Полезен и SEO-аудит: внезапный рост числа внешних ссылок часто оказывается первым следом инъекции.

Частые вопросы

Чем XSS отличается от взлома сайта?
При XSS чужой код выполняется в браузере посетителя, а не на вашем сервере. Но через эту дыру часто получают доступ к админке — и тогда дело заканчивается настоящим взломом.
Достаточно ли одной CSP, чтобы закрыть XSS?
Нет. CSP — вторая линия обороны: она не даёт выполниться постороннему скрипту, но саму ошибку в выводе не исправляет. Начинать нужно с экранирования данных.
Почему в отчёте стоит пометка «требует проверки»?
Сканер видит, что значение параметра вернулось в HTML без экранирования, но не проводит атаку. Подтвердить и оценить риск должен разработчик.
Попробуйте на своём проекте Всё, что описано в статье, доступно в кабинете — бонус при регистрации уже на балансе.
Открыть кабинет
Была ли статья полезна? Спасибо! Учтём при доработке.