🔒 Безопасность
Многоуровневая защита при работе с Claude Code: OWASP TOP-10, защита секретов, безопасность БД, Git safety, Docker изоляция.
🛡️ Уровни защиты
| Уровень | Инструмент | Что защищает |
|---|---|---|
| 1. Permissions deny | settings.json | git --force, DROP TABLE, pg_dump |
| 2. Hooks PreToolUse | dangerous-command-guard | migrate:fresh, db:wipe, rm -rf |
| 3. Hooks PreToolUse | bash-mcp-guard | прямые docker команды |
| 4. Hooks PreToolUse | critical-files-guard | Caddyfile, .env.prod, migrations |
| 5. Hooks PreToolUse | secret-scanner | API ключи, Bearer токены в командах |
| 6. PG роль | claude_readonly | INSERT/UPDATE/DELETE в БД |
| 7. MCP mode | --access-mode=restricted | DDL через MCP PostgreSQL |
⚠️ OWASP TOP-10 — что блокировать в коде
❌ SQL Injection
// ОПАСНО — конкатенация:
DB::select("SELECT * FROM users WHERE id = " . $id);
// БЕЗОПАСНО — параметры:
DB::select("SELECT * FROM users WHERE id = ?", [$id]);
❌ Mass Assignment
// ОПАСНО — все поля:
User::create($request->all());
// БЕЗОПАСНО — только валидированные:
User::create($request->validated());
❌ XSS (Vue)
// ОПАСНО — v-html с ненадёжными данными:
<div v-html="userContent" />
// БЕЗОПАСНО — текстовая интерполяция:
<div>{{ userContent }}</div>
❌ Secrets в коде
// ОПАСНО — захардкоженный ключ:
$key = "sk-ant-api03-XXXXX";
// БЕЗОПАСНО — из переменной:
$key = config('services.anthropic.key');
// или: os.getenv("ANTHROPIC_API_KEY")
🔑 Защита секретов
# .gitignore — обязательные строки:
.env
.env.production
.env.local
.mcp.json # Содержит DATABASE_URI с паролем!
*.pem
*.key
.secrets/
# secret-scanner.cjs перехватывает команды с:
# - sk-* (OpenAI)
# - sk-ant-* (Anthropic)
# - AKIA* (AWS)
# - Bearer tokens
# - git add .env (HARD BLOCK)
Файл .mcp.json содержит DATABASE_URI с паролем! Он должен быть в .gitignore. Никогда не коммитить. Используй переменные окружения или отдельный .mcp.local.json который тоже в .gitignore.
🐳 Docker Security
# docker-compose.yml — правила безопасности:
services:
backend:
user: "1000:1000" # Не root!
read_only: true # Файловая система только для чтения
cap_drop:
- ALL # Убрать все привилегии
security_opt:
- no-new-privileges:true
db:
# НЕТ секции ports для БД!
# Только внутренняя сеть:
networks:
- internal
🔐 Git Security
# Заблокировано permissions + hooks:
git push --force # Перезапишет историю!
git reset --hard # Уничтожит uncommitted работу!
git commit --no-verify # Обходит pre-commit хуки!
# Безопасные альтернативы:
git push --force-with-lease # Только если нет новых коммитов
git restore . # Вместо reset --hard (только файлы)
git revert HEAD # Откат через новый коммит
Принцип наименьших привилегий: Claude Code получает только те права, которые нужны для текущей задачи. БД — read-only. Git — без force push. Docker — через MCP без shell. Файлы prod — защищены guards.