Vasishta03/secret-scanner
GitHub: Vasishta03/secret-scanner
一款功能全面的命令行工具,用于扫描本地及 GitHub 代码库中的 API 密钥泄露,支持历史记录追踪和实时有效性验证。
Stars: 0 | Forks: 0
# secret-scanner
一个用于扫描本地代码库和 GitHub 公共仓库中泄露的 API 密钥和机密信息的 CLI 工具——包括已从代码中删除但在 git 历史记录中仍然存在的机密信息。

## 功能特性
**检测**
- 55+ 种正则表达式模式:涵盖 AWS、GitHub、GitLab、Stripe、OpenAI、Anthropic、Slack、Twilio、Discord、Telegram、npm、PyPI、Shopify、DigitalOcean、Dropbox、Notion、Linear、Terraform、Vault、New Relic、Mapbox、Square、Mailchimp 等
- 针对未加引号的值(`.env`、YAML、INI 文件)进行 Shannon 熵检测
- 行内忽略标记:`# nosec`、`# gitleaks:allow`、`# secretscanner:allow`
- AWS Access Key ID 模式锚定到真实前缀(`AKIA`、`AGPA`、`AROA` 等)——不会在随机大写字符串上产生误报
**验证**
- `--verify` 会发起实时 API 调用,以检查发现的机密信息是否仍然有效
- 支持的服务:GitHub、GitLab、Stripe、OpenAI、Anthropic、HuggingFace、SendGrid、Slack、npm、Replicate
**扫描范围**
- 本地文件树(并行,8 线程)
- Git 历史记录:提交、任何分支,可使用 `--since DATE` 进行日期限定扫描
- GitHub 个人资料:用户或组织的所有公共仓库
- 通过 URL 扫描 GitHub 仓库:`secrets scan https://github.com/owner/repo`
- GitHub Gists:`--include-gists`
**CI/CD 集成**
- 发现任何 CRITICAL 或 HIGH 级别问题时退出码为 `1`
- SARIF 输出,用于 GitHub Security 选项卡 / GitLab SAST
- 基线模式:保存已知发现,仅对新的机密信息发出警报
- 支持自动基线的 Pre-commit hook
- 支持完整 `**` glob 语法的 `.secretignore`
**输出格式**
- 终端(带有严重性颜色代码的精美表格)
- JSON(包含指纹和验证状态)
- CSV
- SARIF 2.1.0
- Markdown 披露报告
## 安装
```
pip install leakscan
```
或从源码安装:
```
git clone https://github.com/Vasishta03/secret-scanner
cd secret-scanner
pip install -e .
```
## 使用方法
**基本本地扫描**
```
secrets scan ./myproject
secrets scan . --severity HIGH --no-entropy
```
**扫描 git 历史记录**(捕获已删除的机密信息)
```
secrets scan . --history
secrets scan . --history --depth 500 --since 2023-01-01
secrets scan . --history --branch main
```
**验证机密信息是否有效**
```
secrets scan . --verify
secrets scan . --verify --severity HIGH
```
**通过 URL 扫描公共 GitHub 仓库**
```
secrets scan https://github.com/owner/repo
secrets scan https://github.com/owner/repo --history --verify
```
**扫描 GitHub 用户的仓库和 Gists**
```
secrets scan --github username
secrets scan --github username --include-gists
secrets scan --github username --history --token $GITHUB_TOKEN
```
**基线模式**(CI 友好:仅对新发现发出警报)
```
secrets scan . --save-baseline .secrets.baseline
secrets scan . --baseline .secrets.baseline
```
**输出格式**
```
secrets scan . --format json --output results.json
secrets scan . --format csv --output findings.csv
secrets scan . --format sarif --output results.sarif
secrets scan --github username --format disclosure --output report.md
```
**在输出中掩码机密信息**(适合共享日志)
```
secrets scan . --redact
secrets scan . --format json --redact --output safe-results.json
```
## 安装为 pre-commit hook
```
cd your-git-repo
secrets install-hook
```
如果存在 `.secrets.baseline`,该 hook 会自动使用它,以抑制已知的发现。
要忽略特定行:在该行添加 `# nosec` 或 `# gitleaks:allow`。
## .secretignore
在项目根目录创建 `.secretignore` 以排除路径:
```
tests/fixtures/**
vendor/**
*.example
docs/
```
支持完整的 `**` glob 语法(类似于 `.gitignore`)。
## GitHub Actions
```
- name: Scan for secrets
run: secrets scan . --severity HIGH --no-entropy --format sarif --output results.sarif
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
```
## 严重性级别
| 级别 | 示例 |
|----------|----------|
| CRITICAL | 私钥(RSA/EC/PGP/OpenSSH/PKCS#8)、AWS 凭证、Azure 存储密钥 |
| HIGH | GitHub/GitLab 令牌、Stripe 生产环境密钥、OpenAI/Anthropic 密钥、Slack 令牌、npm/PyPI 令牌、Telegram/Discord 机器人密钥 |
| MEDIUM | 通用 API 密钥、硬编码密码、JWT 令牌、数据库 URL、Stripe 测试密钥 |
| LOW | 高熵字符串(可能的未知机密信息) |
## 为什么历史扫描很重要
从最新提交中删除机密信息并**不会**将其从 git 历史记录中移除。任何克隆你仓库的人都可以运行 `git log -p` 并恢复它。大多数扫描器完全忽略了这一点。
```
# 查找在过去一年中任何时间点已提交的 secret
secrets scan . --history --depth 1000 --since 2024-01-01
```
## 架构
```
scanner/
cli.py entry point (click)
engine.py file walker, parallel scanner, git history, shared kernel
patterns.py 55+ regex patterns
entropy.py Shannon entropy scorer (quoted + unquoted values)
verifier.py live API verification (10 services)
baseline.py save/load/compare baseline fingerprints
reporter.py terminal/JSON/CSV/SARIF/disclosure output
ignorefile.py .secretignore parser with ** glob support
github/
fetcher.py GitHub API client: repos, gists, commit history
```
## 贡献
```
git clone https://github.com/Vasishta03/secret-scanner
cd secret-scanner
pip install -e ".[dev]"
pytest tests/
```
要添加模式:编辑 `scanner/patterns.py` 并在 `tests/test_scanner.py` 中添加测试。
## 许可证
MIT
标签:API密钥, DevSecOps, Git历史, Google AI, Pre-commit, Python, SARIF, SAST, SOC Prime, 上游代理, 云安全监控, 合规, 安全, 开发工具, 开源, 敏感信息, 无后门, 熵检测, 盲注攻击, 秘密检测, 网络调试, 自动化, 超时处理, 逆向工具, 静态分析