密钥扫描是什么
对仓库内容与历史做密钥检测:提交前钩子、平台内置扫描(GitHub secret scanning / GitLab secret detection)与历史全量扫描三层叠加。密钥一旦「进过」仓库就视为已泄露,正确处置顺序是判定有效性、立即轮换、视情况清理历史,而不是赌有没有人看到。
基本信息
| 层次 | 提交前(pre-commit)、推送时(平台扫描)、历史(全量扫描) |
|---|---|
| 处置 | 判定有效性 → 立即轮换 → 清理历史(视情况) |
| 姿势 | 密钥「进过」仓库就视为已泄露,不要赌是否被看到 |
| 扫描器 | gitleaks、平台内置、pre-commit 钩子 |
| 协作 | 平台扫描命中会通知贡献者与安全团队 |
典型使用场景
- 开发本地:pre-commit 钩子在上游拦截明文密钥
- 平台托管:启用内置扫描,推送即检测
- 历史清理:对全历史跑扫描,找出存量泄漏
- 入门评估:新团队先做一次全量基线扫描
- 事件响应:发现泄漏后走轮换流程并复核其他仓库
实践要点
- 误报处理:规则加白名单要评审,别把真密钥一起放过
- 排除文件:锁文件与测试样本按规则排除,降低噪音
- 范围完整:私有与公开仓库都要扫,内部仓库同样有外泄路径
- 规则更新:密钥特征库持续演进,保持工具版本跟进
- 告警接入:扫描结果进安全告警通道,避免沉睡
- 基线先行:存量仓库先跑一遍基线,把历史问题量化
- 密钥轮换联动:扫描发现即触发轮换工单,形成处置闭环
全历史扫描
全历史扫描
gitleaks detect --source . --redact
# 平台侧:
# GitHub → Settings → Code security → Secret scanning三层防护
| 层次 | 时机 | 工具 |
|---|---|---|
| 提交前 | 本地提交 | pre-commit 钩子 |
| 推送时 | 进入远端 | 平台内置扫描 |
| 历史 | 定期或一次性 | gitleaks 全量 |
发现密钥后应优先轮换,而不是删文件:删除不能撤回已发生的暴露。
扫描的价值在处置闭环:告警有响应人、有轮换记录,才算真正生效。