首页/开发/代码质量与评审速查/Secret 扫描:提交前拦截凭据
规范与静态检查65 条

Secret 扫描:提交前拦截凭据

把密钥泄漏拦在提交与推送阶段:gitleaks 扫描工作区与 git 历史,检测 AWS 密钥、私钥、Token 等模式;发现泄漏须轮换凭据并清理历史,仅删文件不算处置。

Secret 扫描是什么

Secret 扫描把密钥泄漏拦在提交与推送阶段:以 gitleaks 为代表的工具按规则匹配工作区、暂存区与 git 历史里的云厂商密钥、私钥、访问令牌等模式。发现真实凭据后的处置顺序是先吊销或轮换,再清理历史——只删掉当前文件并不算处置完成。

基本信息

常用工具gitleaks、trufflehog 等
扫描对象工作区、暂存区、完整 git 历史
配置方式配置文件里定义规则与允许清单
处置顺序轮换凭据 → 清理历史 → 复盘流程

典型使用场景

  • 提交前拦截:钩子里扫暂存区,阻止密钥进入提交
  • 定期全历史扫描:检查历史里是否已经存在泄漏
  • 上线前审计:确认配置与脚本里没有硬编码凭据
  • 外部贡献合并前:对改动做一次独立扫描
  • 事故发生后:确认真实凭据范围,逐一轮换

允许清单怎么用

  • 只对确认为假阳性的匹配加白名单
  • 白名单要写清路径与原因,并纳入评审
  • 测试用的示例密钥应带有明显的假值特征
  • 每次调整白名单都要重新评估覆盖范围

常用命令

常用命令
gitleaks detect --source .                        # 扫描工作区与历史
gitleaks protect --staged                         # 只扫暂存区,适合放进钩子
gitleaks detect --source . --log-opts="--all"      # CI 里扫完整历史
gitleaks detect --no-git --source ./dist          # 扫描非 Git 目录

泄漏后的处置顺序

步骤动作说明
第一步吊销并轮换凭据一旦推到远端就应视为已经公开
第二步清理历史用 filter-repo 之类的工具重写历史并通知协作者
第三步复盘流程补钩子、补扫描、缩小权限范围
第四步检查使用痕迹查看访问日志,确认是否已被使用
发现真实凭据后:先吊销或轮换,再清理历史;只删当前文件,历史里依然能完整复原。
把全历史扫描放进 CI 的例行任务:只要漏掉一次,凭据就会长期留在仓库历史里,越晚发现清理成本越高。
扫描规则要跟着技术栈维护:接入新的云服务或私有令牌格式时,及时补充匹配规则。

易错点

  • 只扫工作区不扫历史:旧提交里的密钥长期潜伏在仓库里
  • 用允许清单屏蔽测试目录时写得太宽:真实泄漏一起被忽略
  • 泄漏后只删文件不轮换凭据:凭据仍然有效,风险没有解除
  • 把扫描放进慢钩子:开发者跳过提交检查,泄漏照样进入仓库
  • 只盯配置文件不看文档与示例:示例里的真实密钥同样会被复制出去使用

数据来源与参考

  • Gitleaks 官方仓库(github.com/gitleaks/gitleaks)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌