Перейти к содержимому
>_ITDITDПлатформа веб-безопасности

Глоссарий

Что такое XSS (Cross-Site Scripting) — код, выполняющийся в чужом браузере

XSS (Cross-Site Scripting) заставляет скрипт атакующего выполниться в браузере другого пользователя, что ведёт к краже сессии. Три типа (хранимый, отражённый, DOM) и реальная защита: экранирование на выводе, авто-экранирование фреймворка и CSP.

Опубликовано 2026-06-08 Обновлено 2026-06-08 3 мин чтения

«Текст, который я ввёл в форму, выполняется как скрипт на чужом экране» — это и есть XSS. Вот как он работает и как его надёжно предотвратить (без шагов атаки).

Три типа

XSS делится по тому, «как вредоносная строка доходит до выполнения».

ТипКак подставляется
ХранимыйСохраняется в посте/профиле и выполняется у каждого, кто его просматривает (самый опасный)
ОтражённыйПараметр URL отражается прямо обратно в страницу; выполняется у того, кто кликает по ссылке
DOM-basedБез обращения к серверу — клиентский JS небезопасно обрабатывает ввод

Почему это опасно (как работает)

Браузер выполняет любой <script> на странице как «легитимный код». Если строка атакующего попадает как HTML в страницу, браузер не может отличить её от настоящего кода.

① Атакующий публикует «строку» (комментарий, имя, URL…)
↓ сервер выводит её без экранирования
② Строка подмешивается в страницу как HTML
↓ жертва открывает страницу
③ Код выполняется в браузере жертвы = кража сессии, выдача себя за неё
Выведите строку от пользователя «как есть», и браузер выполнит её как код.

Ущерб — «всё, что может эта страница». Если RCE — худшее на стороне сервера, то XSS — худшее на стороне клиента (пользователя).

Защита: реальное исправление — «экранировать на выводе»

XSS предотвращается на выводе, а не на вводе. В тот миг, когда вы выводите значение, преобразуйте его так, чтобы оно не могло быть интерпретировано как HTML.

1

Экранируйте на выводе (самое важное)

При выводе значений от пользователя преобразуйте < > & " ' в HTML-сущности — используя правильный метод для контекста (тело HTML, атрибут, JS, URL).

2

Не отключайте авто-экранирование вашего фреймворка

React/Vue/шаблоны авто-экранируют по умолчанию. Просто избегайте внедрения сырого HTML (dangerouslySetInnerHTML, v-html), и вы предотвратите большинство XSS.

3

Эшелонированная защита с CSP

Content-Security-Policy позволяет браузеру блокировать скрипты, которые вы не разрешали, ограничивая ущерб, даже если что-то проскользнёт.

4

Защитите cookie

Помечайте сессионные cookie HttpOnly, чтобы JS не мог их прочитать. Даже если их украдут, радиус поражения меньше.

Мнение этого сайта: лучшая защита — не открывать дыру самому

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

Читать дальше

FAQ

QЧто происходит при XSS?
A

Скрипт атакующего выполняется в браузере жертвы как часть настоящей страницы. Это может означать кражу сессии (вход под чужим именем), чтение ввода, дефейс страницы или автоматический запуск других действий.

QКакая защита от XSS главная?
A

Экранирование на выводе: когда вы выводите значения от пользователя, преобразуйте их так, чтобы они не интерпретировались как HTML. Шаблоны React/Vue делают это по умолчанию, поэтому самый большой выигрыш — не отключать это авто-экранирование (избегайте dangerouslySetInnerHTML и т. п.). Добавьте CSP для эшелонированной защиты.

QДостаточно ли санитизации на вводе?
A

Обычно нет. Реальное исправление — экранирование под контекст вывода (тело HTML, атрибут, JS, URL). Фильтры на вводе сами по себе протекают через несоответствие контекстов. Только когда HTML действительно нужно разрешить, пропускайте его через доверенный санитайзер.