.claude/settings.json
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/secret-scan.sh",
"timeout": 20
}
]
}
]
}
}
.claude/hooks/secret-scan.sh (chmod +x)
#!/bin/bash
FILE=$(jq -r '.tool_input.file_path // ""')
[ -f "$FILE" ] || exit 0
.env dosyaları zaten gizli olmalı, onları atla
case "$FILE" in .env|.env.*) exit 0 ;; esac
HITS=$(grep -nEi
-e 'sk-ant-[a-z0-9-]{20,}'
-e 'AKIA[0-9A-Z]{16}'
-e 'ghp_[A-Za-z0-9]{30,}'
-e 'eyJ[A-Za-z0-9_-]{20,}.[A-Za-z0-9_-]{20,}'
-e '-----BEGIN [A-Z ]PRIVATE KEY-----'
-e '(api[_-]?key|secret|password|token)\s[:=]\s*["\x27][^"\x27]{16,}'
"$FILE")
if [ -n "$HITS" ]; then
echo "Bu dosyaya gizli görünen değerler yazıldı:" >&2
echo "$HITS" >&2
echo "Değerleri ortam değişkenine taşı ve .env.example'a örnek koy." >&2
exit 2 # engelleyici: Claude çıktıyı görür ve düzeltir
fi
exit 0
Çıkış kodları
0 başarılı
2 engelleyici hata — Claude stderr'i okur ve düzeltmeye çalışır
diğer engellemez