开源项目
betterleaks/betterleaks avatar
betterleaks/betterleaks

Betterleaks:把密钥发现、验证和误报过滤拆开配置

扫描世界(寻找秘密)。 |新来源 |支持 GitHub、GitLab、Hugging Face、S3 等来源。

1,931 个 Star138 个 ForkGoMIT

秒懂

它是什么?
可配置的 secrets scanner,覆盖 Git、目录、GitHub、GitLab、Hugging Face、S3 与标准输入。
适合谁用?
Betterleaks 适合需要扫描多个代码与数据来源,并愿意维护规则和验证请求的安全团队。不适合把扫描命中直接当作有效凭据,也不适合在未评估外发请求的情况下开启 validate。
能商用吗?
可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 1 天前。
用什么语言写的?
主要是 Go(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。

开源项目深度解析

什么是 Betterleaks · betterleaks-betterleaks-deep-analysis

Betterleaks 是一个可配置、快速且全面的密钥扫描器。它由 Gitleaks 的原作者和团队维护。开发由 Aikido Security 支持。该项目提供了一系列博客文章来解释检测引擎的工作原理,包括《Regex is all you need》、《Rare Not Random》和《Express YourCELf》。

安装方法 · betterleaks-betterleaks-deep-analysis

Betterleaks 支持多种安装方式。通过 Homebrew 可以执行 brew install betterleaks 或 brew install betterleaks/tap/betterleaks。Fedora Linux 用户可以使用 sudo dnf install betterleaks。容器用户可拉取 docker pull ghcr.io/betterleaks/betterleaks:latest。Go 开发者可用 go install github.com/betterleaks/betterleaks@latest。从源代码构建则需 git clone 后运行 make build。

支持的扫描来源 · betterleaks-betterleaks-deep-analysis

Betterleaks 提供多个子命令来扫描不同来源。使用 betterleaks git 扫描 Git 仓库;betterleaks dir 扫描本地文件系统;betterleaks github 扫描 GitHub 组织、用户或特定资源(如 PR);betterleaks gitlab 扫描 GitLab 组、项目或合并请求;betterleaks huggingface 扫描 Hugging Face 模型、数据集、Spaces 和存储桶;betterleaks s3 扫描公共 S3 数据集或枚举 Cloudflare R2 账户中的存储桶;通过 betterleaks stdin 可以从标准输入读取数据。每个子命令都支持详细的选项,具体用法可在扫描文档中找到。

配置与规则过滤 · betterleaks-betterleaks-deep-analysis

Betterleaks 的配置使用 Expr 表达式语言。配置包括全局 prefilter(在正则匹配前运行,可快速排除不相关的资源)、全局 filter(对每个候选密钥运行)以及规则级别的 filter。规则通过 [[rules]] 定义,包含 id、description、regex、keywords 和可选的 filter 和 validate。之前兼容 CEL 配置,但新配置应使用 Expr。用户可以在 Betterleaks Playground 中测试规则。建议生产环境中维护自己的配置,而不是直接扩展上游默认配置。

验证与 Token 效率过滤 · betterleaks-betterleaks-deep-analysis

Betterleaks 支持异步验证已发现的密钥。规则中的 validate 字段使用 Expr 表达式发起 HTTP 请求,并根据响应判断密钥是否有效。例如,可以验证 GitHub 个人访问令牌是否有效,并返回用户名、名称和 OAuth 范围。Token 效率过滤使用 BPE 分词法测量字符串的"稀有度",从而过滤掉自然语言中的误报。实际接入时,应先把验证规则限制在测试令牌和测试仓库,再观察请求目标、返回字段与扫描结果是否符合预期;这一步也能确认网络访问是否符合团队的凭据处理要求。

许可证与项目状态 · betterleaks-betterleaks-deep-analysis

Betterleaks 采用 MIT 许可证,版权归 Zachary Rice 所有。许可证允许自由使用、复制、修改、合并、出版发行、再许可和/或销售软件副本,但软件按"原样"提供,不提供任何明示或暗示的担保。项目在 GitHub 上拥有 1593 颗星、112 个复刻、70 个开放问题,未归档。开发由 Aikido Security 赞助。README 未提及任何官方支持渠道或安全保证。选型时应先区分扫描范围和验证范围:`betterleaks git`、`dir` 与 `stdin` 适合本地输入,`github`、`gitlab`、`huggingface` 和 `s3` 会把扫描对象扩展到外部服务。规则文件中的 `prefilter` 可以在正则匹配前排除资源,`filter` 决定候选结果是否保留,`validate` 则可能发起网络请求确认令牌状态。团队应在测试仓库中先运行默认规则,再加入自己的 Expr 条件,记录误报、漏报和验证请求的返回字段。对于 GitHub 令牌等敏感值,测试日志必须确认不会把完整令牌和接口响应写入构建产物。最终应把规则版本、扫描子命令和退出状态纳入 CI,只有明确知道某类路径为什么被排除,才适合把结果交给后续凭据轮换流程。 Betterleaks 的规则设计适合把发现与判断拆成多个阶段。先用 `git` 或 `dir` 对一个已知样本扫描,确认正则和关键词能命中,再用全局 prefilter 排除不相关路径,最后通过规则级 filter 缩小候选。需要联网验证时,必须明确 validate 请求的域名、方法、响应字段和超时行为,并使用可撤销的测试令牌。GitHub、GitLab、Hugging Face 和 S3 子命令面对的权限模型不同,不能把本地扫描的结论直接复制到远程组织或存储桶。Expr 配置取代旧 CEL 配置后,应在版本控制中保留迁移前后的差异,并用 Playground 或固定样本复核误报变化。Token 效率过滤只是一种辅助信号,不能单独决定某段文本是否为秘密。CI 接入时还需定义结果出口、忽略规则审批和发现后的轮换流程,确保扫描报告不会反过来暴露完整凭据。 扫描结果还应区分新发现、已知忽略和已验证失效三类状态,避免把忽略规则当成删除证据。远程来源的组织范围、仓库范围和存储桶权限也要写入审计记录。 密钥扫描不能只追求命中数量。规则的正则、关键词、过滤表达式和验证请求各自承担不同责任,任何一层过宽都会增加误报或网络请求,过窄又可能漏掉变体。建议先建立包含有效令牌、失效令牌、示例字符串、自然语言和二进制文件的测试样本,比较默认配置与自定义 Expr 配置的结果。对 Git、目录、标准输入和远程服务分别记录扫描范围,避免把一次本地结果解释成整个组织已经完成排查。启用 validate 时应使用短期测试凭据,限制请求权限和出口域名,确认响应中的用户名、名称与范围不会进入公开日志。CI 中还应设置失败阈值、忽略规则审批人和复核期限;发现真实密钥后,扫描只是起点,还需要撤销、替换、追踪使用位置并验证旧值已经失效。项目提供 MIT 许可和多种安装渠道,但这些信息不等于规则覆盖率或供应链风险已经得到保证。 因此,规则上线前要保留一组可重复样本,明确哪些结果进入人工复核,哪些结果触发凭据轮换。 复核结果还要注明扫描时间和配置来源。 每次规则变更都应重新跑有效值、失效值和普通文本样本,并由安全负责人确认远程验证权限。

编辑结论

Betterleaks 适合需要扫描多个代码与数据来源,并愿意维护规则和验证请求的安全团队。不适合把扫描命中直接当作有效凭据,也不适合在未评估外发请求的情况下开启 validate。先在脱敏仓库运行 betterleaks git 与 betterleaks dir,使用自有配置、Playground 和样例令牌分别核对命中、误报和验证响应。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记