보안 시크릿 스캐너
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으로, 개발 워크플로우의 핵심 시점에서 작업을 자동화하여 수동 단계를 줄이고 팀 전체의 일관성을 유지합니다.