# dangling-markup-injection

Плейбук по dangling markup injection: когда HTML-инъекция есть, а JavaScript заблокирован, скилл показывает, как вытащить CSRF-токены и данные страницы через незакрытые теги.

- скилл · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 3600 установок · ★ 2547
- Автор: yaklang
- Лицензия: MIT · policy=mirror · начало файла — в конце страницы
- Исходник: https://github.com/yaklang/hack-skills/tree/HEAD/skills/dangling-markup-injection/SKILL.md
- Обновлён: 2026-09-13
- HTML: https://affpapa.org/nevibecode/skills/dangling-markup-injection

## Что делает

Скилл описывает технику, при которой в точку HTML-инъекции ставится незакрытый тег с атрибутом `src`, `href` или `action`, ведущим на сервер атакующего. Незакрытая кавычка атрибута «съедает» весь последующий HTML, пока браузер не найдёт парную кавычку, и содержимое страницы уходит в URL запроса.

Внутри разобраны векторы эксфильтрации: тег `img`, подмена `form action`, перехват через `base`, редирект `meta refresh`, `link` со стилями, устаревший атрибут `background` у таблиц, `poster` у видео. Отдельная таблица — что именно удаётся украсть: CSRF-токены, предзаполненные поля форм, ключи API в инлайн-скриптах, идентификаторы сессий, OAuth-параметры.

Есть раздел о различиях браузеров. Chrome с 60-й версии блокирует загрузку, если в значении URL-атрибута встречается `<` или перевод строки, поэтому в этом случае советует переходить на `<form action>`. Firefox к таким значениям терпимее. Текст скилла обрывается на описании обхода — часть материала в этом файле не поместилась.

## Установка

### Claude Code (родная платформа)

1. **Через Skills CLI (Vercel)**
```bash
npx skills add yaklang/hack-skills --skill dangling-markup-injection -a claude-code
```

2. **Вручную: положить файлы**
- Файл: `~/.claude/skills/dangling-markup-injection/SKILL.md` — Папка скилла целиком; для одного проекта — .claude/skills/dangling-markup-injection/

### Codex

1. **Через Skills CLI (Vercel)**
```bash
npx skills add yaklang/hack-skills --skill dangling-markup-injection -a codex
```

2. **Вручную: положить файлы**
- Файл: `.agents/skills/dangling-markup-injection/SKILL.md` — Для всех проектов — ~/.agents/skills/

### Cursor

1. **Через Skills CLI (Vercel)**
```bash
npx skills add yaklang/hack-skills --skill dangling-markup-injection -a cursor
```

2. **Вручную: положить файлы**
- Файл: `.cursor/skills/dangling-markup-injection/SKILL.md` — Cursor читает и .agents/skills/, и .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install yaklang/hack-skills dangling-markup-injection
```

2. **Вручную: положить файлы**
- Файл: `.github/skills/dangling-markup-injection/SKILL.md`

### Gemini CLI

1. **Через Skills CLI (Vercel)**
```bash
npx skills add yaklang/hack-skills --skill dangling-markup-injection -a gemini-cli
```

2. **Командой платформы**
```bash
gemini skills install https://github.com/yaklang/hack-skills --path skills/dangling-markup-injection
```

### Windsurf (Devin Desktop)

**Вручную: положить файлы**
- Файл: `.devin/skills/dangling-markup-injection/SKILL.md` — Старый путь .windsurf/skills/ тоже читается

### OpenCode

**Через Skills CLI (Vercel)**
```bash
npx skills add yaklang/hack-skills --skill dangling-markup-injection -a opencode
```

### Claude.ai

**Claude.ai**
- Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills

Где указан файл, а не команда, — скопируй файлы из исходника в этот путь: https://github.com/yaklang/hack-skills/tree/HEAD/skills/dangling-markup-injection/SKILL.md

## Когда брать
- вытащить CSRF-токен со страницы, когда CSP режет инлайн-скрипты
- увести предзаполненные значения формы на свой сервер без JavaScript
- перехватить относительные ссылки и адреса API через подмену `base`
- собрать содержимое страницы в URL, если санитайзер вырезает обработчики событий
- оценить, сработает ли атака в конкретном браузере, до её запуска

## Примеры запросов агенту
- у меня есть HTML-инъекция, но CSP блокирует скрипты — распиши вариант с dangling markup
- покажи, как украсть CSRF-токен через незакрытый тег `img`
- какие векторы эксфильтрации не блокирует Chrome 60+

## Похожие
- [frontend-mobile-security](https://affpapa.org/nevibecode/plugins/frontend-mobile-security.md) — плагин · ★ 41729
- [laravel-security](https://affpapa.org/nevibecode/skills/laravel-security.md) — скилл · 5400 установок
- [VibeSec-Skill](https://affpapa.org/nevibecode/skills/vibesec-skill.md) — скилл · 1100 установок
- [wordpress-security-validation](https://affpapa.org/nevibecode/skills/wordpress-security-validation.md) — скилл · 581 установка
- [frontend-security-coder](https://affpapa.org/nevibecode/agents/frontend-security-coder.md) — субагент · ★ 41729
- [django-security](https://affpapa.org/nevibecode/skills/django-security.md) — скилл · 5000 установок

Из того же набора: [yaklang/hack-skills](https://affpapa.org/nevibecode/by/yaklang/hack-skills.md) — 93 карточки

_Часть страницы не вошла по размеру — она есть в HTML-версии._

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
