XSS
Определение: XSS (Cross-Site Scripting) — это уязвимость, при которой на странице сайта выполняется вредоносный JavaScript-код, подставленный злоумышленником через ввод пользователя (комментарии, формы, параметры URL). В итоге атакующий может, например, украсть сессию, подменить содержимое страницы или выполнить действия от имени пользователя.
Зачем это нужно
- Защитить пользователей от кражи cookies/токенов и захвата аккаунтов.
- Предотвратить подмену контента (фишинг прямо на вашем домене).
- Снизить риск действий «от лица пользователя» (заявки, покупки, смена данных).
- Не допустить попадания вредоносных скриптов в выдачу и блокировок со стороны браузеров/антивирусов.
- Понимать, где опасные места: комментарии, отзывы, поиск, фильтры, чаты, UGC-контент.
Пример
Пример кода:
// ПЛОХО: вставка пользовательского ввода как HTML
element.innerHTML = userInput
// ХОРОШО: вставка как текст (скрипт не выполнится)
element.textContent = userInput
Если вставлять ввод пользователя через innerHTML, браузер может интерпретировать его как разметку и выполнить внедрённый скрипт. Безопаснее выводить как текст или строго экранировать данные и разрешать только безопасные теги.
Скриншот
Подпись к скриншоту: страница с формой/комментарием, где демонстрируется опасный ввод и видно, что сайт отображает его без экранирования (как HTML).
Частые ошибки
- Надеяться на «фильтр запрещённых слов» вместо правильного экранирования по контексту (HTML/атрибут/URL/JS).
- Проверять ввод только на фронтенде и считать, что на сервере можно не валидировать.
- Использовать innerHTML для вывода пользовательских данных «ради удобства».
- Делать глобальные исключения в WAF, не закрывая источник уязвимости в коде.
Связанные термины
Наши услуги
- Доработка сайтов — поиск и устранение XSS, безопасный вывод данных, настройка фильтрации и правок шаблонов.
- Техническая поддержка сайтов — обновления, контроль логов, мониторинг подозрительных запросов и инцидентов.
- Создание корпоративных сайтов — разработка с учётом безопасности и правильных практик обработки пользовательского ввода.