// docs / security guides / claude code checklist
Чек-лист безопасности Claude Code: 26 пунктов
Claude Code (агент CLI Anthropic) генерирует целые базы кода с помощью косых команд, управляет многофайловым рефакторингом и читает файлы /writes через bash. Этот контрольный список нацелен на конкретные риски Claude Code: отсутствие политик безопасности по умолчанию, редко добавляемое ограничение скорости, <code>.claude/CLAUDE.md</code> в качестве файла защиты, а также риск фиксации <code>.env</code> или кэшированных токенов. 26 элементов по секретам, базе данных, аутентификации, заголовкам, развертыванию и ошибкам, специфичным для Claude Code.
PRE = предварительное развертывание (проверка источника). DEPLOY = во время развертывания. POST = проверка после развертывания. Ссылка на элементы FixVibe, проверьте идентификаторы в форме category.check-id, где это необходимо.
Секреты и ключи API (5 шт.)
Claude Code читает все исходные деревья и выводит целые файлы. Секреты в вашем контексте становятся секретами на выходе.
- PRE — Create
.claude/CLAUDE.mdwith security policies. Добавьте: "Security Rules: Никогда не встраивайте ключи service_role в клиентские пакеты. Всегда маршрутизируйте конфиденциальные операции через конечные точки, доступные только на сервере. Убедитесь, что NEXT_PUBLIC_* переменные env содержат только безопасные значения (без ключей, без токенов)". Claude Code читается как.claude/CLAUDE.mdдля руководства проектом. - PRE — Ensure
.env.localis in.gitignore. Claude Code может случайно зафиксировать.env.localво время рефакторинга. Запуститеgit ls-files .env*, чтобы проверить, что отслеживается. Если.env.localприсутствует, он отображается. - PRE — Audit generated API routes for env-var verification. Claude Code иногда забывает проверить наличие
process.env.SECRETна стороне сервера перед его использованием. Маршруты должны быстро завершаться сбоем, если переменная env отсутствует, а не переходить к значению по умолчанию. - PRE — Check the
.claudecache directory. Claude Code кэширует контекст разговора в.claude/cacheили.claude/history. Эти файлы не следует фиксировать. Добавьте.claude/к.gitignore. - POST — Run secrets.browser-storage on the deployed app. Если Claude Code встроил ключ, пассивное сканирование найдет его в визуализированном пакете.
Контроль доступа к базе данных (4 шт.)
Claude Code отлично генерирует схему, но политики RLS требуют явных инструкций.
- PRE — Instruct Claude Code on RLS in
.claude/CLAUDE.md. Добавьте: «Каждая миграция должна включатьALTER TABLE ... ENABLE ROW LEVEL SECURITYиFORCE ROW LEVEL SECURITY. Каждая политика должна проверятьauth.uid()пользователя». - PRE — Review generated migrations for
FORCE ROW LEVEL SECURITY. Claude Code может генерироватьENABLE, но забудьтеFORCE. БезFORCEвладельцы таблиц (бегун миграции) обходят RLS. Добавьте его вручную, если он отсутствует. - DEPLOY — Test RLS enforcement after deploy. Откройте Supabase Studio, выберите стол, подтвердите, что переключатель RLS установлен на ON. Если при миграции Claude Code использовался
ENABLEбезFORCE, переключатель отобразит ON, но принудительное выполнение будет неполным. - POST — Run the baas.supabase-rls active check. Он пытается выполнить запись с помощью ключа anon. Если это удастся, RLS будет неполным. Добавьте
FORCEк миграции и повторно разверните.
Аутентификация и сеансы (4 шт.)
Claude Code хорошо генерирует потоки аутентификации, но не добавляет автоматически ограничение скорости и не проверяет все заявки на токены на стороне сервера.
- PRE — Mandate server-only auth verification in
.claude/CLAUDE.md. Добавьте: «Каждый маршрут API, который изменяет данные, должен проверять пользователяawait supabase.auth.getUser()на сервере. Никогда не доверяйтеgetSession()или пользователю ID из тела запроса». - PRE — Check generated auth handlers for token expiry. Для токенов Magic-link и сброса пароля требуется
expires_at, принудительно установленный сервером. Спросите Claude Code: «Добавьте проверку, отклоняющую токены старше 1 часа». - PRE — Verify sign-in redirect guards. Перенаправление параметра
nextдолжно начинаться с/, а не//. Добавьте к.claude/CLAUDE.md: «Проверьте параметрnext: он должен начинаться с/, отклонить, если он начинается с//или содержит протокол». - POST — Test logout clears cookies. Войдите, выйдите, проверьте Приложение → Файлы cookie. Файл cookie сеанса необходимо удалить. Если оно сохраняется, конечная точка выхода из системы не уничтожает состояние.
Заголовки HTTP и CSP (3 шт.)
Claude Code по умолчанию не генерирует промежуточное программное обеспечение, если вы не спросите.
- PRE — Add middleware request to
.claude/CLAUDE.md. Включите: «Создатьsrc/middleware.tsс Content-Security-Policy, используя nonce для каждого запроса, HSTS, заголовки X-Frame-Options и X-Content-Type-Options». Затем попросите Claude Code реализовать это. - PRE — Verify
src/middleware.tsexists and has CSP. При макете Next.jssrc/промежуточное программное обеспечение должно находиться вsrc/middleware.ts, а не в корне проекта. Убедитесь, что заголовок CSP включает'strict-dynamic'и nonce. - POST — Run headers.security-headers on the deployed URL. Проверка сообщает об отсутствии заголовков и предлагает исправления для вашей платформы.
Гигиена развертывания (4 пункта)
Claude Code не настраивает вашу платформу развертывания — это ваша ответственность, но стоит проверить.
- DEPLOY — Scope env vars per environment in Vercel (or equivalent). Настройки → Переменные среды → назначьте каждый секрет только Production. Никогда не делитесь
sk_live_*с предварительной версией или разработкой. - DEPLOY — Audit your CI workflow for secret echo. Если GitHub Действия или другой CI где-либо имеет
echo $SECRET, удалите его. Журналы сборки архивируются; секреты в журналах скомпрометированы. - DEPLOY — Prefer platform-native secret storage. Vercel Настройки → Переменные среды зашифрованы; GitHub Секреты действий лучше, чем ничего, но они не соответствуют собственному хранилищу платформы.
- POST — Rotate any key that reached a public build. Если ключ появился в Vercel Предварительном просмотре URL или любом общедоступном артефакте даже на несколько секунд, он скомпрометирован. Немедленно поверните.
Claude Code-специфичные ошибки (5 шт.)
Шаблоны, уникальные для архитектуры и рабочих процессов Claude Code:
- Claude Code forks work into subagents. В больших задачах Claude Code может создавать несколько экземпляров субагента, каждый из которых имеет частичный контекст кодовой базы. Если один субагент галлюцинирует секретно-безопасный паттерн, которого нет у другого, возникает противоречие. Внимательно просмотрите окончательный результат.
- Bash operations are unverified. Claude Code выполняет команды bash напрямую.
git commit -m "fix"удобно, но если в рабочем каталоге есть файл.envи он включается в glob, он фиксируется. Всегда проверяйтеgit diff --cachedперед тем, как Claude Code примет решение. - Context window boundaries create gaps. Если ваша кодовая база велика, контекст Claude Code может быть разбит на несколько окон. Обработка
.env.localодного окна может отличаться от обработки другого. Примените политику в.claude/CLAUDE.mdи проверьте выходные данные. - Rate-limiting is almost never added without asking. Claude Code генерирует рабочие CRUD, но редко включает в себя заголовки, ограничивающие скорость, или логику экспоненциальной задержки. Явно попросите об этом в
.claude/CLAUDE.md. .claude/CLAUDE.mdis read but not enforced. Claude Code воспринимает.claude/CLAUDE.mdкак подсказку, а не как ограничение. Если подсказка противоречит задаче, Claude Code может ее проигнорировать. Всегда проверяйте результат.
Следующие шаги
Проверьте general vibe coding security checklist на наличие 44 элементов кросс-инструмента, затем просмотрите step-by-step hardening для шаблонов времени развертывания. Если вы также используете Cursor, см. Cursor security checklist.
