
Betterleaks Git 密钥扫描实战如何快速挖掘提交历史与暂存区中的泄漏凭证【免费下载链接】betterleaksFind leaked secrets everywhere.项目地址: https://gitcode.com/gh_mirrors/be/betterleaksBetterleaks是一款可配置、速度快且检测彻底的密钥泄漏扫描器secret scanner由 Gitleaks 原班团队维护。它的git扫描模式可以深入 Git 提交历史、暂存区staged与工作区差异帮助你在密钥被删掉之后依然把它们找出来——因为 Git 历史里从未真正遗忘任何一行内容。为什么 Git 历史是密钥泄漏的重灾区删掉配置、从分支中移除 Token、甚至git reset重做提交——这些操作都无法抹去历史对象。密钥只要曾经被 commit 过就会一直躺在仓库的.git/objects里等待被挖出。泄漏场景传统做法Betterleaks 方案Token 提交后被删除重写历史危险且繁琐一次扫描历史精确定位引入密钥的提交密钥写在 commit message 里人工翻记录--includecommit-messages自动覆盖amend / rebase 后丢失的提交手动翻 reflog--includereflogs恢复覆盖密钥即将随 commit 推送事后补救--staged暂存区拦截 pre-commit 钩子团队仓库批量防护无服务端--pre-receive钩子直接拒绝推送默认规则集内置了几百条厂商规则GitHub PAT、AWS、OpenAI、Stripe 等见 config/betterleaks.toml。快速上手扫描完整提交历史安装 Betterleaks 后最简单的一条命令就是扫描当前仓库的全部历史betterleaks git .它会并行遍历每一次提交的文件补丁patch用内置的正则规则 关键词预过滤Aho-Corasick高速匹配。报告里会给出密钥所在的确切提交 SHA、文件路径与行号并附带作者与时间信息让你能直接回答是谁、在哪个提交里泄漏的。常用增强选项# 只扫最近 90 天、且只看 src/ 目录下的补丁 betterleaks git . --log-opts--all --since90 days ago -- src/ # 同时扫描提交说明文字commit message 里贴 Token 的意外并不罕见 betterleaks git . --includecommit-messages # 同时扫 tag 注解消息与本地 reflog覆盖 amend/reset/rebase 丢弃的提交 betterleaks git . --includecommit-messages,tag-messages,reflogs # 大仓库提高检测并发 betterleaks git . -j 8--includereflogs是一个容易被忽略的利器它能把被git amend、git reset或git rebase抛弃的提交重新纳入扫描范围见 docs/scanning.md 中 reflogs 一节。暂存区扫描在 commit 发生前拦截密钥这是本文的重点场景——把扫描左移到提交之前。# 只扫描暂存区index 相对 HEAD 的新增行 betterleaks git --staged--staged模式只读取暂存的新增内容不触碰历史速度极快且默认关闭网络验证完全适合放在本地钩子里。官方仓库自带了一个现成的 pre-commit 钩子脚本 scripts/pre-commit.py它内部就是执行betterleaks git --staged --redact检测到泄漏 → 非零退出码 →本次 commit 被 Git 直接拒绝--redact让终端输出中的密钥被遮蔽避免二次泄漏到日志钩子受git config hooks.betterleaks开关控制默认启用。类似的还有--unstaged扫描已跟踪文件中尚未暂存的新增行不包含 untracked 文件。两者的定位差异命令扫描范围典型用途betterleaks git --staged暂存区新增行相对 HEADpre-commit 钩子提交前拦截betterleaks git --unstaged工作区新增行相对 index写代码时的实时自查betterleaks git .全部提交历史接手新仓库 / 安全审计betterleaks fs .文件系统完整文件含未跟踪文件全量兜底扫描从本地到团队把防护做成流水线1. 提交前pre-commit将 scripts/pre-commit.py 放入.git/hooks/pre-commit并赋予可执行权限即可。需要临时跳过时执行git config hooks.betterleaks false2. 推送时pre-receive服务端在bare服务端仓库中部署hooks/pre-receive只扫描本次推送新增的提交old..new区间发现泄漏就以非零码让 Git 拒绝整个 push并可通过--pre-receive-error-message向推送者打印自定义提示。相关实现位于 sources/pre_receive.go。3. 验证密钥是否仍然有效扫描只回答哪里出现了密钥加上-v还能回答它还能用吗# 验证检测到的凭证是否仍然有效 betterleaks git . -v # 验证 分析身份与权限该密钥属于谁、能做什么 betterleaks git . -a分析会解析出账号身份、权限范围如 GitHub Token 的 scopes与严重度评分帮助你在众多告警中快速排定优先级。报告输出与已知误报的优雅处理# 生成 JSON 报告便于 CI 集成与审计留档 betterleaks git . --output findings.jsonJSON 报告包含扫描状态、字节数、按置信度/严重度/验证状态分类的统计计数结构定义见 docs/schemas/findings.schema.json。对于确认安全的样例密钥如文档中的示例值有两条轻量豁免路径行内豁免标记在该行任意位置加上betterleaks:allow兼容gitleaks:allow即可抑制指纹忽略文件把密钥的 SHA-256 指纹写入.betterleaksignore该值在任何位置、任何提交出现都会被忽略。生成指纹而不把密钥暴露进 shell 参数printf %s $SECRET | betterleaks fingerprint更多配置细节过滤表达式、验证/分析逻辑参见 docs/config.md。实战小结一套推荐的扫描姿势日常开发pre-commit 钩子跑--staged把泄漏挡在 commit 之外接手仓库 / 定期审计betterleaks git . --includecommit-messages全历史扫一遍大仓库配-j提速安全加固对可疑结果加-a做身份与权限分析优先处理有效且高权限的凭证CI/服务端JSON 报告入库 --pre-receive钩子拒绝带密钥的推送误报治理行内betterleaks:allow标记或.betterleaksignore指纹文件。Git 不会遗忘但 Betterleaks 可以让遗忘发生——在它变成事故之前。更多扫描模式远程仓库 URL 扫描、GitHub/GitLab 平台资源扫描等可参考 README.md 与 docs/scanning.md核心 Git 扫描实现位于 sources/git.go。【免费下载链接】betterleaksFind leaked secrets everywhere.项目地址: https://gitcode.com/gh_mirrors/be/betterleaks创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考