关于 security-secrets
security-secrets 是用于在代码库中查找凭据泄露的安全技能,提供正则模式和扫描指引,涵盖常见密钥类型、重点文件、命令行扫描与脱敏规则。
主要功能
- 01高信号密钥正则模式
- 02覆盖常见凭据类型
- 03重点文件风险指引
- 04命令行扫描命令
- 05密钥脱敏格式
- 06立即轮换指引
适用场景
- 01搜索仓库中的泄露凭据
- 02安全审查时确定文件优先级
- 03在审计报告中脱敏扫描结果
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ igorwarzocha/ opencode-workflows --skill security-secrets安装后在 Claude Code 中输入/security-secrets确认已加载。
附带文件scripts/scan-all.shscripts/scan.sh
详细介绍
用于检测代码库中密钥的高可信度正则表达式模式。
高可信度正则表达式模式
| 密钥类型 | 模式 | 说明 |
|---|---|---|
| AWS 访问密钥 | AKIA[0-9A-Z]{16} | 始终为 20 个字符,以 AKIA 开头 |
| AWS 密钥 | (?i)aws(.{0,20})?['"][0-9a-zA-Z/+]{40}['"] | 40 个类似 base64 的字符 |
| Google API 密钥 | AIza[0-9A-Za-z\-_]{35} | 总共 39 个字符 |
| Google OAuth | [0-9]+-[0-9A-Za-z_]{32}\.apps\.googleusercontent\.com | 客户端 ID |
| Google 服务账号 | "type":\s*"service_account" | 位于 JSON 文件中 |
| GitHub 令牌 | gh[pousr]_[A-Za-z0-9_]{36,} | ghp_/gho_/ghu_/ghs_/ghr_ |
| GitHub PAT(细粒度) | github_pat_[A-Za-z0-9_]{22,} | 较新的格式 |
| GitLab 令牌 | glpat-[A-Za-z0-9\-]{20,} | 个人访问令牌 |
| Stripe 密钥 | `sk_(live | test)_[0-9a-zA-Z]{24,}` |
| Stripe 受限密钥 | `rk_(live | test)_[0-9a-zA-Z]{24,}` |
| Stripe 可发布密钥 | `pk_(live | test)_[0-9a-zA-Z]{24,}` |
| Slack 机器人令牌 | xoxb-[A-Za-z0-9-]+ | 机器人令牌 |
| Slack 用户令牌 | xoxp-[A-Za-z0-9-]+ | 用户令牌 |
| Slack 工作流令牌 | xwfp-[A-Za-z0-9-]+ | 工作流令牌 |
| Slack 应用令牌 | xapp-[A-Za-z0-9-]+ | 应用级令牌 |
| Slack Webhook | https://hooks\.slack\.com/services/T[A-Z0-9]+/B[A-Z0-9]+/[a-zA-Z0-9]+ | |
| Discord 令牌 | [MN][A-Za-z\d]{23,}\.[\w-]{6}\.[\w-]{27} | 机器人令牌 |
| Discord Webhook | https://discord\.com/api/webhooks/[0-9]+/[A-Za-z0-9_-]+ | |
| OpenAI 密钥 | sk-[A-Za-z0-9]{48} | API 密钥 |
| Anthropic 密钥 | sk-ant-[A-Za-z0-9\-]{32,} | API 密钥 |
| Twilio | SK[a-z0-9]{32} | API 密钥 SID |
| SendGrid | SG\.[a-zA-Z0-9]{22}\.[a-zA-Z0-9]{43} | API 密钥 |
| Mailgun | key-[0-9a-zA-Z]{32} | API 密钥 |
| Mailchimp | [a-f0-9]{32}-us[0-9]{1,2} | API 密钥 |
| Firebase | (?i)firebase[a-z0-9\-]+\.firebaseio\.com | 数据库 URL |
| Supabase | eyJ[A-Za-z0-9_-]*\.[A-Za-z0-9_-]*\.[A-Za-z0-9_-]* | JWT(检查上下文) |
| Heroku | [hH]eroku.*[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12} | API 密钥 |
| NPM 令牌 | npm_[A-Za-z0-9]{36} | 发布令牌 |
| PyPI 令牌 | pypi-[A-Za-z0-9_-]{50,} | 上传令牌 |
| 私钥 | `-----BEGIN (RSA | EC |
| 数据库 URL | `(?i)(postgres | mysql |
| URL 中的密码 | [a-zA-Z]{3,15}://[^/\\:@]+:[^/\\:@]+@.{1,100} | 基本身份验证 |
| JWT 密钥 | `(?i)(jwt[_-]?secret | token[_-]?secret)['"]?\s*[:=]\s*['"][^'"]+['"]` |
| 通用密钥 | `(?i)(password | passwd |
CLI 扫描命令
# Quick grep scan (fast, high signal)
rg -n "(AKIA[0-9A-Z]{16}|sk_(live|test)_|rk_(live|test)_|pk_(live|test)_|xox[baprs]-|xapp-|xwfp-|gh[pousr]_|github_pat_)" .
rg -n "BEGIN (RSA|EC|OPENSSH|DSA|PGP) PRIVATE KEY" .
rg -n "(?i)(api[_-]?key|secret|token|password)\s*[:=]\s*['\"][^'\"]{8,}" .
# Dedicated scanners (thorough)
gitleaks detect --source . --redact --no-git
semgrep scan --config p/secrets --error
trufflehog filesystem . --only-verified
<priority_files>
优先检查的文件
| 文件模式 | 风险级别 | 原因 |
|---|---|---|
.env* | CRITICAL | 通常包含所有密钥 |
*config*.js/ts/json | HIGH | 应用配置 |
*secret*、*credential* | HIGH | 名称可疑 |
docker-compose*.yml | HIGH | 数据库密码、服务凭据 |
.github/workflows/*.yml | HIGH | CI/CD 密钥 |
*test*、*spec*、*fixture* | MEDIUM | 测试数据中可能包含真实凭据 |
*.pem、*.key、*.p12 | CRITICAL | 私钥 |
</priority_files>
脱敏格式
报告密钥时,必须始终进行脱敏:
Original: AKIAIOSFODNN7EXAMPLE
Redacted: AKIA****...****MPLE
Original: sk_test_XXXXYYYYZZZZ11112222
Redacted: sk_****...****2222
仅显示前 4 个和后 4 个字符。必须指示立即轮换密钥。
评论
支持 Markdown