Vasishta03/secret-scanner

GitHub: Vasishta03/secret-scanner

一款功能全面的命令行工具,用于扫描本地及 GitHub 代码库中的 API 密钥泄露,支持历史记录追踪和实时有效性验证。

Stars: 0 | Forks: 0

# secret-scanner 一个用于扫描本地代码库和 GitHub 公共仓库中泄露的 API 密钥和机密信息的 CLI 工具——包括已从代码中删除但在 git 历史记录中仍然存在的机密信息。 ![demo](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/0c1446c1ea055223.svg) ## 功能特性 **检测** - 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, 上游代理, 云安全监控, 合规, 安全, 开发工具, 开源, 敏感信息, 无后门, 熵检测, 盲注攻击, 秘密检测, 网络调试, 自动化, 超时处理, 逆向工具, 静态分析