# csrf-protection

Скилл подсказывает агенту, как закрыть формы и эндпоинты от подделки запросов: синхронизатор-токены, double-submit cookie и SameSite.

- скилл · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 453 установки · ★ 236
- Автор: secondsky
- Лицензия: MIT · policy=mirror · начало файла — в конце страницы
- Исходник: https://github.com/secondsky/claude-skills/tree/HEAD/plugins/csrf-protection/skills/csrf-protection/SKILL.md
- Обновлён: 2026-10-20
- HTML: https://affpapa.org/nevibecode/skills/csrf-protection

## Что делает

Скилл описывает три способа защиты от Cross-Site Request Forgery: скрытое поле с токеном, который проверяется на сервере, пару «cookie + заголовок», которые должны совпасть, и атрибут SameSite у cookie. Внутри есть готовые примеры для Express на JavaScript: генерация токена через `crypto.randomBytes`, middleware, который кладёт токен в сессию, и проверка на POST-запросах.

Сравнение токенов идёт через `crypto.timingSafeEqual`. Тут есть подвох: эта функция бросает `RangeError`, если буферы разной длины, поэтому в примере сначала идёт явная проверка длины. Если скопировать код без неё, валидация упадёт с ошибкой вместо честного 403 — это повод прочитать пример целиком, а не выдёргивать строку.

Отдельно разобраны настройки сессионной cookie (`httpOnly`, `secure`, `sameSite`), вставка скрытого поля `_csrf` в HTML-форму и список частых ошибок: токен в `localStorage`, переиспользование токена между сессиями, отсутствие срока жизни. Для Flask и React есть ссылка на `references/python-react.md` с настройкой Flask-WTF и хуками для работы с токеном.

## Установка

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

1. **Через Skills CLI (Vercel)**
```bash
npx skills add secondsky/claude-skills --skill csrf-protection -a claude-code
```

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

### Codex

1. **Через Skills CLI (Vercel)**
```bash
npx skills add secondsky/claude-skills --skill csrf-protection -a codex
```

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

### Cursor

1. **Через Skills CLI (Vercel)**
```bash
npx skills add secondsky/claude-skills --skill csrf-protection -a cursor
```

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

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install secondsky/claude-skills csrf-protection
```

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

### Gemini CLI

1. **Через Skills CLI (Vercel)**
```bash
npx skills add secondsky/claude-skills --skill csrf-protection -a gemini-cli
```

2. **Командой платформы**
```bash
gemini skills install https://github.com/secondsky/claude-skills --path plugins/csrf-protection/skills/csrf-protection
```

### Windsurf (Devin Desktop)

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

### OpenCode

**Через Skills CLI (Vercel)**
```bash
npx skills add secondsky/claude-skills --skill csrf-protection -a opencode
```

### Claude.ai

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

Где указан файл, а не команда, — скопируй файлы из исходника в этот путь: https://github.com/secondsky/claude-skills/tree/HEAD/plugins/csrf-protection/skills/csrf-protection/SKILL.md

## Когда брать
- закрыть POST-форму от подделки запросов с чужого сайта
- сгенерировать и проверить CSRF-токен в Express без сторонней библиотеки
- настроить SameSite и secure у сессионной cookie
- сравнить токены без утечки времени через timingSafeEqual
- разобрать типичные ошибки вроде токена в localStorage

## Примеры запросов агенту
- добавь CSRF-защиту в форму перевода через синхронизатор-токен
- проверь мои POST-роуты в Express и подскажи, где не хватает валидации токена
- настрой SameSite=Strict для сессионной cookie

## Похожие
- [rate-limiting-abuse-protection](https://affpapa.org/nevibecode/skills/rate-limiting-abuse-protection.md) — скилл · 319 установок
- [csrf-cross-site-request-forgery](https://affpapa.org/nevibecode/skills/csrf-cross-site-request-forgery.md) — скилл · 3700 установок
- [browser-auth-flow](https://affpapa.org/nevibecode/skills/browser-auth-flow.md) — скилл · 689 установок
- [Python Security Scan](https://affpapa.org/nevibecode/skills/python-security-scan.md) — скилл · 540 установок
- [laravel-security](https://affpapa.org/nevibecode/skills/laravel-security.md) — скилл · 5400 установок
- [django-security](https://affpapa.org/nevibecode/skills/django-security.md) — скилл · 5000 установок

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

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

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