前置知识: GitHub

密钥扫描

2 minIntermediate2026/6/14

GitHub密钥扫描:自动检测泄露的密钥、推送保护与补救措施。

1. 密钥扫描概述

1.1 为什么需要密钥扫描

意外将密钥(API Key、Token、密码)推送到公开仓库是常见的安全事故。密钥扫描可以自动检测并阻止泄露。

1.2 GitHub 密钥扫描功能

功能说明可用性
密钥扫描扫描仓库中的密钥公开仓库免费
推送保护阻止推送含密钥的代码免费启用
Partner 模式与服务提供商联动撤销自动

2. 支持的密钥

2.1 常见密钥

模式示例服务
GitHub Tokenghp_xxxxGitHub
AWS Access KeyAKIAxxxxAWS
Google API KeyAIza...Google
Slack Tokenxoxb-...Slack
Stripe Keysk_live_...Stripe
私钥-----BEGIN RSA...通用

GitHub 支持检测超过 200 种密钥型。

3. 推送保护

3.1 启用推送保护

  1. 仓库 Settings → Code security → Push protection → Enable

3.2 推送保护工作流程

git push

GitHub 检查推送内容

发现密钥?
├── 是 → 阻止推送,显示警告
│         ↓
│    选项1: 修改代码移除密钥
│    选项2: 如果是误报,允许推送

└── 否 → 正常推送

3.3 绕过推送保护

# 如果确认不是真实密钥(如测试数据)
git push --force
# 或在推送时添加标记
# 在 commit message 中添加 "@allow"

4. 密钥泄露补救

4.1 立即行动

# 1. 撤销泄露的密钥
# 在对应服务平台重新生成密钥

# 2. 从 Git 历史中移除
git filter-repo --path .env --invert-paths

# 3. 强制推送
git push --force

# 4. 通知团队

4.2 使用环境变量

#  硬编码密钥
const API_KEY = "sk_live_abc123";

#  使用环境变量
const API_KEY = process.env.API_KEY;

4.3 使用 GitHub Secrets

# .github/workflows/deploy.yml
env:
  API_KEY: ${{ secrets.API_KEY }}

5. 自定义模式

5.1 添加自定义密钥模式

组织 Settings → Code security → Custom patterns

# 示例:检测自定义 API Key
MYCOMPANY_API_KEY=[A-Za-z0-9]{32}

6. 最佳实践

  • 启用推送保护
  • 使用 .gitignore 排除敏感文件
  • 使用 GitHub Secrets 存储 CI/CD 密钥
  • 使用环境变量而非硬编码
  • 定期轮换密钥
  • 使用预提交钩子检测密钥
# 安装 detect-secrets 预提交钩子
pip install detect-secrets
detect-secrets scan > .secrets.baseline
pre-commit install