ХукБезопасность

protect-secrets

Блокирует запись файлов с секретами: .env, токены, пароли, приватные ключи. Не даёт случайно закоммитить.

Закинь в Claude, Cursor или любой AI

Описание

Простым языком

В файле .env хранятся пароли и ключи доступа — это как сейф. AI иногда пытается туда что-то записать, думая что помогает. Этот хук как замок на сейфе — блокирует любую попытку записи в секретные файлы.

Раньше AI мог перезаписать твой .env и ты терял настройки. Теперь хук говорит: стоп, это запрещено, поменяй вручную.


Что делает

Хук protect-secrets блокирует любую запись в файлы, содержащие секреты: .env, *.pem, *.key, id_rsa. Если AI попытается записать в такой файл — операция прерывается с объяснением.

Это не про безопасность кода, а про защиту от случайного изменения или перезаписи секретных файлов. AI иногда предлагает "обновить .env" — этот хук блокирует такую попытку.

Когда срабатывает

Триггер: PreToolUse — до операций Write и Edit. Условие: имя файла совпадает с паттерном секретных файлов. Действие: выход с кодом 2 блокирует операцию.


Установка

  1. Добавь конфиг PreToolUse в .claude/settings.json
  2. Создай ~/.claude/hooks/protect-secrets.sh с правами chmod +x
  3. Проверь: попроси 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 сканирует пуши на секреты — но хук остановит раньше.
#Hooks#Claude Code#Quality Gates
TG

> Пока нет комментариев

Связанный контент

Похожие инструменты