2900万个Key裸奔!你的OpenAI/Claude Key现在可能正在GitHub上免费送
搞 AI 开发,最让人头疼的不是调模型,是管 Key。
Claude、OpenAI、Gemini、DeepSeek、阿里云……每接一个平台,就多一串不知道放哪的 API Key。刚开始还挺规范:老老实实写在 .env 里,分门别类存好。
但用着用着,就开始走捷径了:
- 测试代码里直接硬写 Key
- 用完忘记删
- 一个
git push,钱包就开始慢慢缩水了
你知道现在 GitHub 上有多少裸奔的 Key 吗?
根据 GitGuardian 和 Snyk 2025 年的最新报告:

- 2025 年全年,2900 万个硬编码凭证被公开 push 到 GitHub 公共仓库
- AI 服务相关的 Key 同比暴增 81%,DeepSeek 一家就贡献了 11.3 万个
- 65% 的 Forbes AI 50 顶级 AI 公司,都在 GitHub 上留下了已验证的有效 Key
这不是危言耸听,而是每天正在发生的事。
先来感受一下真实的惨案
案例1:AWS 账单按 $200/秒扣费
有开发者把 .env 文件直接 commit 进仓库,里面带着 AWS 密钥。5 分钟后,某东欧黑产团伙的自动化扫描器发现了它,立刻用来批量开挖矿机。账单开始按 $200/秒计费,整个过程不到 30 分钟,损失上万美元。
案例2:Claude 帮你整理好Key,全部公开在 Gist 上
更离谱的是这种场景:开发者让 Claude 帮整理代码,.env 文件没有加入 .claudeignore,结果 Claude 在处理过程中把所有的 Key 归整到一起,自动生成了一个 Gist 链接,全部公开。
现场教学:免费送 Key。
然后账单来了。
案例3:Gemini Key 泄露,直接破产
有博主记录了自己的惨痛经历:Gemini Key 泄露后不到 2 小时,额度就被刷爆,直接负债。现在厂商们开始设置欠费自动断发 Token,但很多平台的限额默认是关闭的。
实测:你也可以试试
打开 Google,搜索这个:
intext:"openai_api_key=sk" site:".github.com" -gist
或者直接在 GitHub 搜索框输入 OPENAI_API_KEY,你会发现大量公开的 .env 文件,里面有效 Key 触手可及。
甚至有人专门做了 实时监控网站 apiradar.live,它 24 小时刷 GitHub 公共事件流,一旦发现新泄露的 OpenAI/Claude/Gemini Key,立刻报警。据该网站显示,已处理超过 3.7 万个活跃密钥泄露威胁。
泄露在 GitHub 上的 Key,分钟内被请求 5 万次——你的钱包在帮陌生人做慈善。
为什么这么容易泄露?
很多开发者不是不懂安全,而是在特定场景下产生了"想当然"的侥幸心理:

1. 测试代码写死 Key
# ❌ 常见错误:直接硬编码在代码里
client = openai.OpenAI(api_key="sk-proj-xxxxxxxxxxxx")
测试完了忘记删,commit 一提,Key 就进了 Git 历史记录。
2. .env 文件没加 .gitignore
# ❌ .gitignore 没配置 .env
# 文件就这样被提交了
git add .
git commit -m "add config"
git push origin main
# 完蛋
3. AI 工具读到了你的 Key
用 Claude Code、GitHub Copilot 等 AI 编码工具时,如果没有配置 .claudeignore 或 .gitignore,工具在处理项目时可能读取到 .env 文件内容,并在建议或生成的代码中无意间将其暴露。
4. 历史提交里的定时炸弹
很多人以为在最新 commit 里删除 Key 就安全了。
错。
Git 历史不会自动清除。旧的 commit 里 Key 依然存在,只要仓库是公开的,攻击者就能找到它。
正确的密钥管理姿势

第一层防线:本地开发端
① 永远用 .env 存 Key,并加入 .gitignore
# .gitignore
.env
.env.local
.env.*.local
*.key
*.pem
② 用 python-dotenv(Python)/ dotenv(Node.js)读取
from dotenv import load_dotenv
import os
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
client = openai.OpenAI(api_key=api_key)
// Node.js
require('dotenv').config();
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
③ 配置 Pre-commit 钩子自动扫描
使用 gitleaks 在每次 commit 前自动检测是否有 Key 泄露:
# 安装 gitleaks
brew install gitleaks # macOS
# 或
winget install gitleaks # Windows
# 配置 pre-commit 钩子
cat > .git/hooks/pre-commit << 'EOF'
#!/bin/sh
gitleaks protect --staged --redact -v
if [ $? -ne 0 ]; then
echo "❌ 发现密钥泄露风险,commit 已阻止"
exit 1
fi
EOF
chmod +x .git/hooks/pre-commit
第二层防线:Gitleaks vs TruffleHog 选哪个?
| 特性 | Gitleaks | TruffleHog |
|---|---|---|
| 核心机制 | 基于正则表达式 | 基于检测器 + 实时验证 |
| 速度 | 极快,适合本地 pre-commit | 较慢但精准 |
| 误报率 | 相对较高 | 低(会验证 Key 是否有效) |
| 扫描范围 | Git 历史记录 | Git + S3 + Docker + Slack |
| 推荐场景 | CI/CD 快速阻断、本地预检 | 企业级精准防护 |
建议组合使用:本地用 Gitleaks(速度快),CI/CD 用 TruffleHog(精度高)。
第三层防线:GitHub 平台原生防护
在 GitHub 仓库设置里开启:
1. Settings → Code security → Secret scanning(开启)
2. Settings → Code security → Push protection(开启)
GitHub 会自动识别 OpenAI、AWS、Stripe 等主流服务的 Key 格式,在你 push 时直接阻断。
这个功能免费且对公开仓库默认开启,但私有仓库需要手动激活。
第四层防线:生产环境密钥管理
个人项目用 .env,团队和生产环境必须升级到专业的密钥管理方案:
# 使用 GitHub Actions Secrets(CI/CD 场景)
name: Deploy
jobs:
deploy:
steps:
- name: Call OpenAI
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
run: python my_script.py
对于生产服务,推荐使用: - AWS Secrets Manager / Azure Key Vault / Google Secret Manager - HashiCorp Vault(开源,支持自托管) - Doppler(开发者友好的 SaaS 密钥管理)
特别注意:AI 编码工具的安全边界
如果你在使用 Claude Code、GitHub Copilot 等 AI 助手:
# .claudeignore(Claude Code 专用)
.env
.env.*
*.key
secrets/
# .gitignore(Git 通用)
.env
.env.local
⚠️ 安全边界:AI 工具只应读取代码逻辑相关文件,绝对不应该有权限读取
.env或任何包含真实凭证的文件。
如果 Key 已经泄露了,怎么办?
黄金 30 分钟内:
第1步:立刻撤销 Key(最重要!)
不要先去改代码,先去平台吊销 Key:
- OpenAI:platform.openai.com/api-keys
- Anthropic(Claude):console.anthropic.com/settings/keys
- Google Gemini:console.cloud.google.com/apis/credentials
吊销 Key 是第一步,不要等。
第2步:审计异常使用
检查各平台控制台: - 是否有异常的 API 调用峰值? - 是否出现从未见过的 IP 地址? - 账单是否有异常费用?
第3步:清理 Git 历史(不是只删文件!)
# 安装 git-filter-repo
pip install git-filter-repo
# 从所有历史 commit 中清除 .env 文件
git filter-repo --path .env --invert-paths
# 强制推送
git push origin --force --all
⚠️ 注意:如果仓库有其他协作者,强制推送会破坏他们的本地历史。最好的方案是:直接废弃旧仓库,重新建一个干净的仓库。
第4步:生成新 Key,部署新密钥管理方案
生成新 Key 后,这次把它放进正确的地方,别再硬写了。
一行配置,保住你的饭碗
说了这么多,最关键的一步,就是在每个项目初始化时做好这件事:
# 新项目初始化时
echo ".env" >> .gitignore
echo ".env.local" >> .gitignore
echo "*.key" >> .gitignore
echo "*.pem" >> .gitignore
git add .gitignore
git commit -m "chore: 添加密钥相关文件到 .gitignore"
管好 Key = 管好钱包 = 管好饭碗。
2900 万个 Key 裸奔在 GitHub 上,其中有没有你的?
现在去检查一下你的仓库吧。
工具清单 - gitleaks - 本地 pre-commit 密钥扫描 - trufflehog - 深度验证密钥扫描 - git-filter-repo - Git 历史清理 - apiradar.live - 实时 GitHub 密钥泄露监控 - GitGuardian - 企业级密钥管理与监控

长按二维码关注 “边学边练”