protect-secrets
Блокирует запись файлов с секретами: .env, токены, пароли, приватные ключи. Не даёт случайно закоммитить.
Описание
Простым языком
В файле .env хранятся пароли и ключи доступа — это как сейф. AI иногда пытается туда что-то записать, думая что помогает. Этот хук как замок на сейфе — блокирует любую попытку записи в секретные файлы.
Раньше AI мог перезаписать твой .env и ты терял настройки. Теперь хук говорит: стоп, это запрещено, поменяй вручную.
Что делает
Хук protect-secrets блокирует любую запись в файлы, содержащие секреты: .env, *.pem, *.key, id_rsa. Если AI попытается записать в такой файл — операция прерывается с объяснением.
Это не про безопасность кода, а про защиту от случайного изменения или перезаписи секретных файлов. AI иногда предлагает "обновить .env" — этот хук блокирует такую попытку.
Когда срабатывает
Триггер: PreToolUse — до операций Write и Edit. Условие: имя файла совпадает с паттерном секретных файлов. Действие: выход с кодом 2 блокирует операцию.
Установка
- Добавь конфиг
PreToolUseв.claude/settings.json - Создай
~/.claude/hooks/protect-secrets.shс правамиchmod +x - Проверь: попроси AI записать что-то в
.env— должен получить отказ
Конфиг settings.json
{
"hooks": {
"PreToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/protect-secrets.sh"
}
]
}
]
}
}Скрипт хука
#!/bin/bash
# protect-secrets.sh — блокировка записи секретных файлов
# PreToolUse: Write | Edit
FILE="${CLAUDE_TOOL_INPUT_PATH:-}"
[ -z "$FILE" ] && exit 0
BASE=$(basename "$FILE")
BLOCKED_NAMES=(".env" ".env.local" ".env.production" ".env.staging" ".secrets")
for BLOCKED in "${BLOCKED_NAMES[@]}"; do
if [ "$BASE" = "$BLOCKED" ]; then
echo "BLOCKED [protect-secrets] Запись в $BASE запрещена."
echo "Измени файл вручную: nano $FILE"
exit 2
fi
done
case "$BASE" in
*.pem|*.key|*.p12|*.pfx)
echo "BLOCKED [protect-secrets] Приватный ключ: $BASE"
exit 2
;;
id_rsa|id_ed25519|id_ecdsa)
echo "BLOCKED [protect-secrets] SSH приватный ключ: $BASE"
exit 2
;;
esac
if grep -qE '^(API_KEY|SECRET|PASSWORD|TOKEN)=' "$FILE" 2>/dev/null; then
echo "WARN [protect-secrets] Файл содержит секреты: $BASE"
echo "Убедись, что $BASE указан в .gitignore"
fi
exit 0Примеры работы
Хук блокирует Write и Edit с кодом выхода 2 — операция не выполняется.
Что пропускает
.env.example— шаблон без реальных значений.env.test— если добавлен в список исключений- Чтение файлов (Read) — хук только на Write/Edit
Что блокирует
- Запись в
.env,.env.local,.env.production - Редактирование
*.pem,*.keyфайлов - Создание или изменение SSH-ключей
id_rsa,id_ed25519 - Файлы с явными паттернами секретов в содержимом
Настройка под себя
- Добавь
credentials.json,service-account.jsonдля Google Cloud - Добавь
~/.aws/credentialsдля AWS CLI - Для разрешения записи в сессии: переменная
ALLOW_SECRET_WRITE=1 - Веди лог блокированных попыток в файл для аудита
Лучше десять ложных срабатываний, чем один API-ключ в публичном репозитории. GitHub сканирует пуши на секреты — но хук остановит раньше.
> Пока нет комментариев
Связанный контент
Похожие инструменты
/pre-commit-check
Проверки перед коммитом: security scan, lint, типы, debug-код. Всё в одной команде.
Открыть →branch-guard
Блокирует прямой push в main/master. Предлагает создать PR через GitHub CLI.
Открыть →destructive-guard
Блокирует деструктивные bash-команды: rm -rf, DROP TABLE, git reset --hard. Спрашивает подтверждение.
Открыть →security-scan
Автоматическое сканирование кода на SQL-инъекции, XSS и другие уязвимости при каждом Write/Edit.
Открыть →