secret-scanner

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Secret Scanner Skill

Secret Scanner 技能

Prevent accidental secret exposure in your codebase.
防止代码库中意外泄露密钥。

When I Activate

激活时机

  • ✅ Before git commits
  • ✅ Files modified/saved
  • ✅ User mentions secrets, keys, or credentials
  • ✅ .env files changed
  • ✅ Configuration files modified
  • ✅ Git提交前
  • ✅ 文件修改/保存时
  • ✅ 用户提及密钥、API密钥或凭据
  • ✅ .env文件变更时
  • ✅ 配置文件修改时

What I Detect

检测范围

API Keys & Tokens

API密钥与令牌

  • AWS access keys (AKIA...)
  • Stripe API keys (sk_live_..., pk_live_...)
  • GitHub tokens (ghp_...)
  • Google API keys
  • OAuth tokens
  • JWT secrets
  • AWS访问密钥(AKIA...)
  • Stripe API密钥(sk_live_..., pk_live_...)
  • GitHub令牌(ghp_...)
  • Google API密钥
  • OAuth令牌
  • JWT密钥

Database Credentials

数据库凭据

  • Database connection strings
  • MySQL/PostgreSQL passwords
  • MongoDB connection URIs
  • Redis passwords
  • 数据库连接字符串
  • MySQL/PostgreSQL密码
  • MongoDB连接URI
  • Redis密码

Private Keys

私钥

  • SSH private keys
  • RSA/DSA keys
  • PGP/GPG keys
  • SSL certificates
  • SSH私钥
  • RSA/DSA密钥
  • PGP/GPG密钥
  • SSL证书

Authentication Secrets

认证密钥

  • Password variables
  • Auth tokens
  • Session secrets
  • Encryption keys
  • 密码变量
  • 认证令牌
  • Session密钥
  • 加密密钥

Alert Examples

告警示例

API Key Detection

API密钥检测

javascript
// You type:
const apiKey = 'sk_live_1234567890abcdef';

// I immediately alert:
🚨 CRITICAL: Exposed Stripe API key detected!
📍 File: config.js, Line 3
🔧 Fix: Use environment variables
  const apiKey = process.env.STRIPE_API_KEY;
📖 Add to .gitignore: .env
javascript
// 当你输入:
const apiKey = 'sk_live_1234567890abcdef';

// 我会立即告警:
🚨 严重警告:检测到暴露的Stripe API密钥!
📍 文件:config.js,第3🔧 修复方案:使用环境变量
  const apiKey = process.env.STRIPE_API_KEY;
📖 建议:将.env添加到.gitignore中

AWS Credentials

AWS凭据

python
undefined
python
undefined

You type:

当你输入:

aws_access_key = "AKIAIOSFODNN7EXAMPLE"
aws_access_key = "AKIAIOSFODNN7EXAMPLE"

I alert:

我会告警:

🚨 CRITICAL: AWS access key exposed! 📍 File: aws_config.py, Line 1 🔧 Fix: Use AWS credentials file or environment variables aws_access_key = os.getenv("AWS_ACCESS_KEY_ID") 📖 Never commit AWS credentials
undefined
🚨 严重警告:AWS访问密钥已暴露! 📍 文件:aws_config.py,第1行 🔧 修复方案:使用AWS凭据文件或环境变量 aws_access_key = os.getenv("AWS_ACCESS_KEY_ID") 📖 切勿提交AWS凭据
undefined

Database Password

数据库密码

yaml
undefined
yaml
undefined

You type in docker-compose.yml:

当你在docker-compose.yml中输入:

environment: DB_PASSWORD: "mySecretPassword123"
environment: DB_PASSWORD: "mySecretPassword123"

I alert:

我会告警:

🚨 CRITICAL: Database password in configuration file! 📍 File: docker-compose.yml, Line 5 🔧 Fix: Use .env file DB_PASSWORD: ${DB_PASSWORD} 📖 Add .env to .gitignore
undefined
🚨 严重警告:配置文件中存在数据库密码! 📍 文件:docker-compose.yml,第5行 🔧 修复方案:使用.env文件 DB_PASSWORD: ${DB_PASSWORD} 📖 建议:将.env添加到.gitignore中
undefined

Detection Patterns

检测模式

Pattern Types

模式类型

High Confidence:
  • Known API key formats (Stripe, AWS, etc.)
  • Private key headers
  • JWT tokens
  • Connection strings with credentials
Medium Confidence:
  • Variables named "password", "secret", "key"
  • Base64 encoded strings in sensitive contexts
  • Long random strings in assignments
Low Confidence (Flagged for Review):
  • Generic secret patterns
  • Potential credentials in comments
高可信度:
  • 已知API密钥格式(Stripe、AWS等)
  • 私钥头部
  • JWT令牌
  • 包含凭据的连接字符串
中可信度:
  • 命名为"password"、"secret"、"key"的变量
  • 敏感上下文下的Base64编码字符串
  • 赋值语句中的长随机字符串
低可信度(标记待审核):
  • 通用密钥模式
  • 注释中可能存在的凭据

Git Integration

Git集成

Pre-Commit Protection

提交前防护

bash
undefined
bash
undefined

Before commit, I scan:

提交前,我会扫描:

git add . git commit
git add . git commit

I block if secrets found:

如果检测到密钥,我会阻止提交:

🚨 CRITICAL: Cannot commit - secrets detected! 📍 3 secrets found:
  • config.js:12 - API key
  • .env:5 - Database password (in gitignore - OK)
  • auth.js:45 - JWT secret
❌ Commit blocked - remove secrets first
undefined
🚨 严重警告:无法提交 - 检测到密钥! 📍 共检测到3处密钥:
  • config.js:12 - API密钥
  • .env:5 - 数据库密码(已在gitignore中 - 合规)
  • auth.js:45 - JWT密钥
❌ 提交已阻止 - 请先移除密钥
undefined

.gitignore Validation

.gitignore 有效性检查

I check if sensitive files are in .gitignore:
✅ .env - In .gitignore (good)
⚠️ config/secrets.json - NOT in .gitignore (add it!)
✅ .aws/credentials - In .gitignore (good)
我会检查敏感文件是否已加入.gitignore:
✅ .env - 已在.gitignore中(合规)
⚠️ config/secrets.json - 未在.gitignore中(请添加!)
✅ .aws/credentials - 已在.gitignore中(合规)

False Positive Handling

误报处理

Example Files

示例文件

javascript
// I understand these are examples:
// Example: const apiKey = 'your_api_key_here';
// TODO: Add your API key from environment
javascript
// 我会识别这些是示例内容:
// 示例:const apiKey = 'your_api_key_here';
// TODO: 从环境变量中添加你的API密钥

Test Files

测试文件

javascript
// Test fixtures are OK (but flagged for review):
const mockApiKey = 'sk_test_1234567890abcdef';  // ✅ Test key
javascript
// 测试用例是允许的(但会标记待审核):
const mockApiKey = 'sk_test_1234567890abcdef';  // ✅ 测试密钥

Documentation

文档内容

markdown
<!-- Documentation examples are flagged but low priority -->
Set your API key: `export API_KEY=your_key_here`
markdown
<!-- 文档中的示例会被标记但优先级较低 -->
设置你的API密钥:`export API_KEY=your_key_here`

Relationship with security-auditor

与security-auditor的关系

secret-scanner (me): Exposed secrets and credentials security-auditor: Code vulnerability patterns
secret-scanner(本工具): 检测暴露的密钥与凭据 security-auditor: 检测代码漏洞模式

Together

协同作用

secret-scanner: Finds hardcoded API key
security-auditor: Finds how the key is used insecurely
Combined: Complete security picture
secret-scanner:发现硬编码的API密钥
security-auditor:发现该密钥的不安全使用方式
结合使用:提供完整的安全视图

Quick Fixes

快速修复方案

Move to Environment Variables

迁移至环境变量

javascript
// Before:
const apiKey = 'sk_live_abc123';

// After:
const apiKey = process.env.API_KEY;

// .env file (add to .gitignore):
API_KEY=sk_live_abc123
javascript
// 修复前:
const apiKey = 'sk_live_abc123';

// 修复后:
const apiKey = process.env.API_KEY;

// .env文件(需加入.gitignore):
API_KEY=sk_live_abc123

Use Secret Management

使用密钥管理服务

javascript
// AWS Secrets Manager
const AWS = require('aws-sdk');
const secrets = new AWS.SecretsManager();
const secret = await secrets.getSecretValue({ SecretId: 'myApiKey' }).promise();
javascript
// AWS Secrets Manager
const AWS = require('aws-sdk');
const secrets = new AWS.SecretsManager();
const secret = await secrets.getSecretValue({ SecretId: 'myApiKey' }).promise();

Configuration Files

配置文件

yaml
undefined
yaml
undefined

docker-compose.yml

docker-compose.yml

services: app: environment: - API_KEY=${API_KEY} # From .env file
services: app: environment: - API_KEY=${API_KEY} # 来自.env文件

.env (gitignored)

.env(已加入.gitignore)

API_KEY=sk_live_abc123
undefined
API_KEY=sk_live_abc123
undefined

Sandboxing Compatibility

沙箱兼容性

Works without sandboxing: ✅ Yes (recommended) Works with sandboxing: ✅ Yes
  • Filesystem: Read-only access
  • Network: None required
  • Configuration: None required
无沙箱环境下可用: ✅ 是(推荐) 沙箱环境下可用: ✅ 是
  • 文件系统: 只读权限
  • 网络: 无需网络
  • 配置: 无需额外配置

Customization

自定义配置

Add company-specific secret patterns:
bash
cp -r ~/.claude/skills/security/secret-scanner \
      ~/.claude/skills/security/company-secret-scanner
添加企业专属密钥检测模式:
bash
cp -r ~/.claude/skills/security/secret-scanner \
      ~/.claude/skills/security/company-secret-scanner

Edit SKILL.md to add:

编辑SKILL.md添加以下内容:

- Internal API key formats

- 内部API密钥格式

- Company-specific secret patterns

- 企业专属密钥检测模式

- Custom detection rules

- 自定义检测规则

undefined
undefined

Best Practices

最佳实践

  1. Never commit secrets - Use environment variables
  2. Use .gitignore - Add .env, secrets.json, etc.
  3. Rotate exposed secrets - If committed, rotate immediately
  4. Use secret management - AWS Secrets Manager, HashiCorp Vault
  5. Audit regularly - Review code for exposed secrets
  1. 切勿提交密钥 - 使用环境变量
  2. 合理使用.gitignore - 将.env、secrets.json等文件加入其中
  3. 轮换泄露的密钥 - 若已提交,立即轮换
  4. 使用密钥管理服务 - 如AWS Secrets Manager、HashiCorp Vault
  5. 定期审计 - 检查代码中是否存在暴露的密钥

Emergency Response

应急响应

If Secret Committed

若密钥已提交

  1. Rotate the secret immediately
  2. Remove from git history
    bash
    git filter-branch --force --index-filter \
      "git rm --cached --ignore-unmatch config/secrets.json" \
      --prune-empty --tag-name-filter cat -- --all
  3. Force push (coordinate with team)
  4. Update all deployments with new secret
  1. 立即轮换密钥
  2. 从Git历史中移除
    bash
    git filter-branch --force --index-filter \
      "git rm --cached --ignore-unmatch config/secrets.json" \
      --prune-empty --tag-name-filter cat -- --all
  3. 强制推送(需与团队协调)
  4. 更新所有部署环境以使用新密钥

Related Tools

相关工具

  • security-auditor skill: Vulnerability detection
  • @code-reviewer sub-agent: Security review
  • /review command: Comprehensive security check
  • security-auditor 技能: 漏洞检测
  • @code-reviewer 子Agent: 安全审核
  • /review 命令: 全面安全检查