← 返回目录
ap1.5实操⏱ 约 8 分钟

密钥与配置:一次泄露,余额是全世界的

三条铁律 + 一个能装进 pre-commit 的扫描脚本

🔎 最后验证 2026-08📚 来源:本节扫描脚本为本地静态扫描(不联网);泄露应急流程为行业通行实践🧰 Python、Git
为什么学这个

这一节不省钱,但能救命。

GitHub 上每天都有人把 API key 连着代码推上去。平均多久被扫到并盗用?——分钟级。有自动化爬虫 24 小时盯着新提交,专捞密钥。你睡一觉起来,余额清零、账单爆表,还可能被拿去干违规的事(用的是你的名义)。

这一节给你三条铁律、一个能装进提交钩子的扫描脚本,以及最重要的:万一泄露了,第一步该干什么

💡 打个比方

API key 是你家的钥匙,不是"账号名"。把它写进代码推上 GitHub,等于把钥匙贴在小区门口的公告栏上——不是"可能有人拿",是"专门有人每天来抄"。而且你改代码删掉它也没用:公告栏的旧照片(Git 历史)还在

三条铁律

铁律一:key 只走环境变量,代码里一个字符都不能有。

# ❌ 死刑
KEY = "sk-abc123realkey..."

# ✅ 正确
KEY = os.environ["DEEPSEEK_API_KEY"]     # 取不到就直接崩,比默默用错更好

铁律二:.env 必须进 .gitignore,而且 .gitignore 本身要提交。 本地用 .env 存 key 很方便,但它一旦被提交就等于写进代码。检查一次:git check-ignore .env 有输出 = 已忽略。

铁律三:前端永远不能有 key。 浏览器里的一切用户都能看到——F12 就能翻出来。需要调模型?必须由你的后端代理(AP7 会做)。任何"前端直连大模型 API"的教程,都是在教你烧自己的钱。

万一泄露了:三步应急(顺序不能错)

第一步永远是"作废旧 key",不是"改代码"。

  1. 立刻去服务商后台作废这个 key——只要它还有效,删代码、改历史都是无用功;
  2. 创建新 key,走环境变量重新配置;
  3. 查用量与账单:看有没有异常调用(不是你的时段/量级),有就联系服务商。

特别提醒:改代码 + 强推覆盖历史 ≠ 安全。Git 历史可能已被 fork、被缓存、被爬虫抓走。唯一可靠的止损是作废那把钥匙。

一个能装进提交钩子的扫描脚本

本节代码 secret_scan.py 是纯本地静态扫描(不联网、不上传),覆盖常见密钥形态:sk-sk-ant-AIzaAKIA,以及 api_key = "..." 这类赋值写法,并自动排除 your_key/xxx/example 这类占位符。

本课自己的课程目录扫描结果:

扫描目录:/…/课程-AI应用专业版
✅ 未发现硬编码密钥。保持住:key 永远走环境变量。

进阶用法(主课学过 hooks 的同学直接上手):把它挂到 Git 的 pre-commit 钩子里,扫到就阻止提交——让"不可能提交密钥"变成机器保证,而不是靠你记得。

🔧 动手做:给你的项目上锁(10 分钟)

  1. python3 secret_scan.py 你的项目目录——扫你自己所有正在写的项目,不只是这门课的。
  2. 有命中?先去作废那个 key(别先改代码),再按三步应急走完。
  3. 检查 .gitignore:git check-ignore .env 有输出吗?没有就现在加。
  4. 装钩子:在项目的 .git/hooks/pre-commit 里调用这个脚本,扫到密钥就 exit 1(不会写?把这句需求发给 AI,它两分钟给你)。
  5. 验证钩子有效:故意在一个测试文件里写一行假 key(比如 sk- 加 20 个字符),git commit 试试——应该被拦下。然后删掉测试文件。

做到这里你应该有:一次全项目扫描结果 + 一个会拦截密钥的提交钩子 + 记住"泄露先作废"这个顺序。

为什么:这是全课唯一一节"学了可能永远用不上,但用上一次就值回整门课学费" 的内容。密钥事故的特点是:发生前你觉得不可能,发生后你希望时间倒流。机器保证 > 人的自觉——装上钩子,这事就再也不用靠记性了。

❓ 测验
你发现三个月前的一次提交里有 key,现在代码早改了。最该先做什么?
⚠️ 避坑除了 key,这些也别进仓库

密钥只是最扎眼的一类。同样不能提交的还有:数据库连接串(含密码)、用户数据样本(哪怕只是"几条测试数据"——里面可能有真实手机号)、内部文档/客户名单生产环境配置。一个简单的判断:"这个文件如果出现在陌生人的电脑里,我会不会慌?"——会,就别提交。AP6 讲数据安全时会把这条展开成完整的分级。

🤖 让 AI 给你写提交钩子
我想在 Git 的 pre-commit 钩子里自动扫描密钥:扫到 sk-/AIza/AKIA 开头的字符串或 api_key 赋值这类写法就阻止提交并打印文件名和行号,同时排除 your_key/example/xxx 这类占位符。请给我完整的钩子脚本和安装步骤(我的项目是【语言/框架】)。
✅ 小结

密钥三铁律:只走环境变量、.env 进 .gitignore、前端绝不放 key;泄露三步:作废 → 换新 → 查账单(顺序不能错);把扫描装进 pre-commit,让机器替你记。

AP1 最后一节把前面五节串起来:给每次调用装电表——记 token、算钱、按用户和功能归集。它是 AP7 额度系统和监控的地基。

下一节 → 成本仪表:给每次调用装电表
🔎 来源与核验· 2 条,点开核对
本节每个关键论断都对应一个可追溯的来源 —— 这是本课程"靠谱、不过时"的底线。
「本节扫描脚本覆盖 sk-/sk-ant-/AIza/AKIA 及通用赋值写法,自动排除占位符;为纯本地静态扫描,不联网」
📚 本节代码 secret_scan.py(2026-08 实跑于本课目录,结果:未发现硬编码密钥)✓ 已核验 2026-08
「密钥泄露应急顺序为「作废旧 key → 换新 → 查用量账单」;改代码或重写历史不能替代作废」
📚 行业通行安全实践✓ 已核验 2026-08
智图软件的赞赏码
都看到这了,打个赏呗!
接下来 · ap1.6
成本仪表:给每次调用装电表
继续读下一节 →