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 的例行任务:只要漏掉一次,凭据就会长期留在仓库历史里,越晚发现清理成本越高。
扫描规则要跟着技术栈维护:接入新的云服务或私有令牌格式时,及时补充匹配规则。