セキュリティシークレットスキャナー
Pre-Tool上級Hookタイプ: pre-tool-use
セキュリティシークレットスキャナーは、ファイル書き込みとgit commitをインターセプトして機密データパターンをスキャンします。AWSキー、GitHubトークン、秘密鍵、データベース接続文字列、JWTシークレットなど、数十種類の認証情報パターンをtrufflehogやgitleaksにインスパイアされた正規表現ルールで検査します。潜在的なシークレットが検出されると、操作をブロックし、一致した正確な行とパターンをハイライトします。これにより、開発における最も一般的なセキュリティインシデントである、シークレットの誤ったcommitを防止します。
セキュリティシークレットスキャン認証情報予防
Hookコード
#!/bin/bash
# Security Secret Scanner Hook
# Detects secrets and credentials before they're committed
# Only check Write, Edit, and Bash (git commit)
if [[ "$TOOL_NAME" != "Edit" ]] && [[ "$TOOL_NAME" != "Write" ]] && [[ "$TOOL_NAME" != "Bash" ]]; then
exit 0
fi
# For Bash, only check git commit
if [[ "$TOOL_NAME" == "Bash" ]] && ! echo "$TOOL_INPUT" | grep -q "git commit"; then
exit 0
fi
# Secret patterns (regex)
PATTERNS=(
'AKIA[0-9A-Z]{16}' # AWS Access Key
'ghp_[a-zA-Z0-9]{36}' # GitHub PAT
'sk-[a-zA-Z0-9]{48}' # OpenAI/Anthropic API Key
'sk-ant-api[0-9]{2}-[a-zA-Z0-9_-]{90,}' # Anthropic Key
'-----BEGIN (RSA |EC |DSA )?PRIVATE KEY-----' # Private Key
'postgres://[^\s]+:[^\s]+@' # DB Connection String
'mongodb(\+srv)?://[^\s]+:[^\s]+@' # MongoDB URI
'xox[boaprs]-[0-9a-zA-Z-]+' # Slack Token
'eyJ[a-zA-Z0-9_-]*\.eyJ[a-zA-Z0-9_-]*\.' # JWT Token
'AIza[0-9A-Za-z_-]{35}' # Google API Key
)
FOUND_SECRETS=0
scan_content() {
local content="$1"
local source="$2"
for pattern in "${PATTERNS[@]}"; do
MATCH=$(echo "$content" | grep -oE "$pattern" | head -1)
if [ -n "$MATCH" ]; then
echo "SECRET DETECTED in $source"
echo " Pattern: $pattern"
echo " Match: ${MATCH:0:12}...REDACTED"
FOUND_SECRETS=$((FOUND_SECRETS + 1))
fi
done
}
# Scan based on tool type
if [[ "$TOOL_NAME" == "Edit" ]] || [[ "$TOOL_NAME" == "Write" ]]; then
CONTENT=$(echo "$TOOL_INPUT" | jq -r '.new_string // .content // empty')
FILE_PATH=$(echo "$TOOL_INPUT" | jq -r '.file_path // .path // "unknown"')
scan_content "$CONTENT" "$FILE_PATH"
elif [[ "$TOOL_NAME" == "Bash" ]]; then
STAGED=$(git diff --cached 2>/dev/null)
scan_content "$STAGED" "staged changes"
fi
if [ $FOUND_SECRETS -gt 0 ]; then
echo ""
echo "BLOCKED: $FOUND_SECRETS potential secret(s) found."
echo "Remove secrets and use environment variables instead."
exit 1
fi
exit 0
このHookをClaude Code設定または.claude/settings.jsonに追加して有効化してください。
実行プレビュー
セキュリティシークレットスキャナー
セキュリティシークレットスキャナーについて
Claude Code Hooksは、Claude操作中の特定イベントに応じてカスタムシェルコマンドを自動実行します。セキュリティシークレットスキャナーは上級レベルのPre-Tool Hookで、開発ワークフローの重要なタイミングでタスクを自動化し、手動ステップを削減してチーム全体の一貫性を維持します。