Межсайтовый скриптинг (XSS) — уязвимость веб-сайта, которая позволяет внедрить вредоносный JavaScript в страницы, которые видят другие пользователи, и выполнить его в их браузерах с правами сайта.
Как работает XSS
XSS возникает, когда сайт выводит на страницу непроверенные данные без правильного экранирования. Браузер не может отличить внедрённый код от собственного JavaScript сайта и выполняет его.
Три основных типа:
- Хранимый (stored). Код сохраняется на сервере, например в комментарии или профиле, и срабатывает у каждого посетителя.
- Отражённый (reflected). Код находится в ссылке и возвращается в ответе сервера, поэтому жертва должна открыть подготовленный URL.
- DOM-based. Ошибка в клиентском коде, который записывает небезопасные данные в страницу.
Почему XSS опасен
Внедрённый скрипт может:
- украсть сессионные cookie и токены;
- выполнять действия от имени пользователя;
- показать поддельную форму входа;
- перенаправить на вредоносный сайт или изменить содержимое страницы.
В 2005 году червь Samy через хранимый XSS за сутки добавил в друзья больше миллиона пользователей MySpace. Сегодня XSS в админ-панелях, веб-почте и плагинах популярных CMS — частый способ захвата аккаунтов и сайтов. Вместе с SQL-инъекциями XSS относится к семейству инъекционных уязвимостей.
Как предотвратить XSS
- Экранируйте вывод с учётом контекста (HTML, атрибут, JavaScript, URL). Современные фреймворки делают это по умолчанию — не обходите эту защиту.
- Очищайте пользовательский HTML проверенной библиотекой, например DOMPurify.
- Включите строгую Content Security Policy (CSP), которая запрещает встроенные и сторонние скрипты.
- Помечайте сессионные cookie флагами HttpOnly и Secure, обновляйте плагины CMS.