Claude Code - агент с доступом к локальным данным и инструментам, и это задаёт его модель угроз. Любой текст, который он читает, может содержать инструкции: исходный код, issue, веб-страница, лог, ответ MCP-сервера, метаданные изображения. Prompt injection - это попытка заставить модель принять такой недоверенный текст за управляющую команду. Ключевое понимание всей главы: недоверенный контент - это данные, а не команды, и реальная граница безопасности проходит не в system prompt, который инъекцией можно обойти, а в permissions и sandbox.
Официальная защита складывается из нескольких слоёв, и у каждого своя роль и свой предел. Workspace trust, permission rules, sandbox, credential deny и mask, hooks и human review - каждый закрывает свой класс риска и оставляет открытым другой. Полная карта того, что каждый слой уменьшает и чего не гарантирует, - в таблице ниже; здесь важен сам принцип, что ни один из них не самодостаточен и работает только в композиции.
Полезно один раз свести слои защиты в таблицу: что каждый уменьшает и чего не гарантирует. Ниже такая карта - от workspace trust до human review. Безопасность рождается из композиции слоёв, а не из одного переключателя, и человек, одобряющий diff "не глядя", обнуляет последний слой не хуже отключённого sandbox.
| Слой | Что уменьшает | Чего не гарантирует |
|---|---|---|
| workspace trust | Авто-приём project-конфига из чужого checkout | Безопасность самого текста |
| permission rules | Запуск известных tools/inputs | Смысл разрешённой операции |
| sandbox | Файловое/сетевое воздействие процесса | Корректность правки |
| credential deny/mask | Чтение перечисленных секретов | Защиту неперечисленного |
| hooks | Детерминированные проверки событий | Безошибочность самого hook |
| human review | Оценку diff и последствий | Безопасность при одобрении не глядя |
Перед открытием незнакомого репозитория есть проверяемый порядок. Проверить origin и источник архива. Просмотреть .claude/, .mcp.json, hooks, plugins и shell-скрипты как исполняемую политику - потому что это она и есть. Не одобрять workspace trust автоматически. Запускать неизвестный проект без production-credentials. Начать с Manual или Plan и строгого sandbox. Этот порядок превращает "просто открыл чужой репозиторий" в осознанный допуск исполняемой конфигурации, написанной кем-то другим.
Секреты подчиняются простому правилу: их не должно быть там, откуда модель их прочитает. Не вставляйте API-ключи в prompt, CLAUDE.md, skill, определение агента, закоммиченные settings, снапшот теста или лог. Используйте secret store провайдера и инъекцию из окружения. Отдельно помните про ANTHROPIC_API_KEY: он имеет приоритет аутентификации и может незаметно перевести с подписки на API-биллинг - /status должен показывать ожидаемого провайдера. Deny-read для .env и ключей - полезный baseline, но не единственная защита.
Сторонний код требует той же настороженности, что и любой недоверенный ввод. MCP-сервер получает ровно те полномочия, что даёт его протокол; плагин может поставлять skills, агентов, hooks, MCP и LSP разом; hook - это программа с правами процесса Claude Code. Отсюда дисциплина: закреплять и просматривать источник, изучать манифест и передаваемые scopes, начинать с тестового аккаунта, удалять сервер или плагин при неясном происхождении и не путать наличие в marketplace с одобрением безопасности.
Инженерный вывод собирает всё в одну архитектуру. Самая сильная практическая защита - это композиция: одноразовый worktree или контейнер, минимальный token, allowlist доменов, deny на секреты, точечные правила инструментов и обязательный review diff и тестов. Ни один отдельный переключатель эту композицию не заменяет. Именно сочетание слоёв, а не самый строгий из них по отдельности, делает автономную работу агента безопасной настолько, насколько это вообще достижимо.
Полезно один раз оформить это как минимальный security gate - чек-лист перед автономным запуском. Ниже он и приведён: ограниченный scope, чистый git, отсутствие production-секретов, доверенная project-конфигурация, sandbox с контролируемым escape hatch, deploy и push в ask/deny, заранее определённые тесты и простой rollback. Типичный провал - довериться одному слою; правильный ход - пройти весь gate, потому что безопасность здесь складывается, а не выбирается.
# Минимальный security gate перед автономным запуском
[ ] scope задачи ограничен
[ ] git status чист или изменения сохранены
[ ] нет production secrets в процессе
[ ] project config просмотрен и trusted
[ ] sandbox enabled; escape hatch контролируется
[ ] deploy/push/delete остаются ask/deny
[ ] тесты и review определены до запуска
[ ] есть простой rollback: branch, checkpoint или disposable worktree