首页/安全/加密与证书速查/代码库密钥扫描

代码库密钥扫描

在提交前与 CI 中加入密钥扫描(gitleaks、trufflehog 等),拦截私钥、Token 与口令进入仓库;一旦推送到远端即视为泄露,删除文件不能撤销,应直接轮换。

加密与证书速查安全更新于 2026-10-13

代码库密钥扫描

在提交前与 CI 中加入密钥扫描(如 gitleaks、trufflehog),可以拦截私钥、Token 与口令进入仓库。真正要记住的是处置原则:内容一旦推送到远端就视为已泄露,删除文件或改写历史都无法收回,正确动作是立即轮换对应密钥并评估使用记录。扫描应覆盖工作区、提交前钩子、CI 门禁与历史提交四个位置。

基本信息

覆盖点工作区扫描、提交前钩子、CI 门禁、历史提交扫描
常见命中私钥 PEM、云访问密钥、Token、口令文件
处置原则轮换为先,清理历史为辅
误报处理维护白名单并定期复核,避免噪音掩盖真实告警
成本全量历史扫描较慢,适合定期执行而非每次提交

典型使用场景

  • 新仓库接入 CI 时的门禁配置
  • 定期扫描历史提交,发现早期遗留的密钥
  • 收敛扫描规则与白名单,减少无效告警
  • 事故处置:确认泄漏范围并列出待轮换密钥清单
  • 与开发流程结合:用提交前钩子拦截,减少事后清理

扫描工具示例

扫描工具示例
gitleaks detect --source . --verbose          # 扫描工作区与历史
trufflehog filesystem . --only-verified      # 优先关注可验证的真实凭据
# 提交前钩子场景可只扫描暂存区,速度更快
# gitleaks protect --staged

扫描位置对比

位置时机特点
提交前钩子本地提交时反馈快,但可被绕过
CI 门禁推送或合并时覆盖全团队,需要白名单
工作区扫描按需执行适合事故排查
历史提交扫描定期执行耗时长,用于发现遗留问题
强推改写历史无法收回已经推送出去的内容:发现泄露后必须评估使用记录并轮换对应密钥,把「先轮换、后清理」固定为标准流程,而不是先花时间清理历史。
落地建议:先跑一轮全量历史扫描拿到基线,再按仓库收敛规则;把高频误报加进白名单并定期复核,避免告警疲劳。对确认为真实的命中项,直接登记到待轮换清单,跟踪到密钥全部替换完成。

易错点

  • 发现泄露只删文件不轮换密钥 → 密钥仍然有效,泄露事实没有改变
  • 只扫描工作区不检查历史提交 → 早期提交里的凭据长期留在仓库中
  • 告警噪音过大不加收敛 → 团队逐渐忽略告警,真实泄漏被淹没
  • 把提交前钩子当作唯一防线 → 本地可以绕过,必须配合 CI 门禁

数据来源与参考

  • gitleaks 项目文档
  • GitHub 官方文档(推送保护与密钥扫描)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌