hostprofi.ru
Подобрать хостинг
Термин·буква З

Защита от XSS

краткое определение

Уязвимость веб-приложений, позволяющая внедрить вредоносный JavaScript в страницы сайта.

XSS (Cross-Site Scripting, межсайтовый скриптинг) — класс уязвимостей веб-приложений, при которых злоумышленник внедряет вредоносный JavaScript-код на страницы, просматриваемые другими пользователями. Входит в OWASP Top 10 на протяжении 20 лет.

Как работает XSS

Атака эксплуатирует доверие браузера к скриптам, загруженным с легитимного домена. Злоумышленник находит точку ввода данных — форму комментария, поисковую строку, URL-параметр — и добавляет тег <script> или обработчик события. Если приложение выводит эти данные без экранирования, браузер выполняет код в контексте целевого сайта.

Типы XSS

  • Stored XSS (постоянный) — вредоносный код сохраняется в базе данных. Срабатывает при каждом просмотре заражённой страницы. Пример: скрипт в поле имени пользователя, отображаемом в заголовке сайта.
  • Reflected XSS (отражённый) — код передаётся в URL или POST-параметрах и немедленно возвращается сервером без сохранения. Требует, чтобы жертва перешла по специально сформированной ссылке.
  • DOM XSS — уязвимость в JavaScript на стороне клиента: скрипт читает URL-параметры или хеш и вставляет их в DOM без экранирования.

Последствия XSS-атаки

Похищение сессионных cookie (session hijacking), захват аккаунта без знания пароля, выполнение действий от имени жертвы, перенаправление на фишинговый сайт, запись нажатий клавиш (keylogging), распространение вредоносного ПО через drive-by download.

История

Термин XSS появился в 2000 году в бюллетене Microsoft. В 2005 году MySpace поразил червь Samy Kamkar — первый XSS-червь, добавивший автора в друзья 1 миллиону пользователей за 20 часов. В 2011 году XSS-уязвимость в Twitter распространяла ссылки при наведении курсора. Google, Facebook и другие крупные компании платят за найденные XSS-уязвимости тысячи долларов через bug bounty программы.

Защита от XSS

Многоуровневая защита:

  1. Экранирование вывода — HTML-encode всего пользовательского ввода перед выводом. <&lt;, "&quot;. В PHP: htmlspecialchars($input, ENT_QUOTES, 'UTF-8').
  2. Content Security Policy (CSP) — HTTP-заголовок, ограничивающий источники скриптов. Content-Security-Policy: script-src 'self' запрещает инлайновые скрипты и внешние CDN без белого списка.
  3. HttpOnly cookiesSet-Cookie: session=...; HttpOnly; Secure запрещает JavaScript читать сессионные cookie.
  4. WAF — Web Application Firewall (Nginx ModSecurity, Cloudflare WAF) фильтрует XSS-паттерны на уровне запроса.
  5. Валидация на сервере — принимать только ожидаемые форматы данных. Поле «телефон» должно содержать только цифры и +.

На что обращать внимание

Фреймворки React, Vue, Angular автоматически экранируют вывод через Virtual DOM — основной вектор XSS закрыт. Опасные паттерны: innerHTML, dangerouslySetInnerHTML, document.write(), eval() — избегайте или используйте с санитизацией. SQL-инъекции и XSS часто присутствуют вместе — один аудит выявляет оба класса.

Для аудита XSS-уязвимостей используются инструменты: OWASP ZAP — бесплатный сканер с автоматическим поиском XSS в веб-приложении. Burp Suite — профессиональный инструмент пентестеров. Регулярный аудит кода на наличие innerHTML, document.write и небезопасных шаблонов — обязательная практика перед релизом. Связка XSS + SQL-инъекция позволяет злоумышленнику контролировать и интерфейс, и данные — такие уязвимости приоритетны для устранения. Правильная настройка CSP-заголовков в Nginx блокирует большинство XSS без изменений в коде приложения.

В PHP-приложениях используйте библиотеку HTML Purifier для санитизации HTML-разметки от пользователей — она разрешает только безопасные теги и атрибуты, удаляя потенциально опасные onclick и onload. В сочетании с CSP-заголовками и защитой от перебора через Nginx rate limiting это обеспечивает многоуровневую защиту приложения.

Другие термины