昨天打开 OpenAI API 后台的时候,我差点以为系统出 Bug 了。

账户余额显示:
-$125.66
第一反应是:
"我最近根本没怎么调用 API,怎么会欠费一百多美元?"
结果一查 Usage,发现事情远比想象中严重。
异常从 5 月 29 日开始

查看消费曲线后,我发现:
-
5 月 29 日出现第一波异常请求
-
6 月 5 日开始明显增长
-
6 月 6 日彻底爆发
短短几天时间:
-
Total Spend:$167.34
-
Total Tokens:13,048,668
-
Total Requests:2,563
对于我这种个人开发者来说,这个数字完全不正常。
谁在疯狂调用我的 API?

进一步查看请求日志。
我发现大量请求都长这样:
"你是一位世界一流的图像描述大师......"
后面跟着数千字 Prompt。

任务内容几乎全部都是:
-
OCR识别
-
图片分析
-
图像描述
-
JSON结构化输出
更夸张的是,同一分钟内出现大量完全相同的请求。
正常用户不可能这样操作。
这明显是自动化脚本在批量执行任务。
API Key 是怎么泄露的?
目前我还无法100%确定泄露源头。
但根据我的排查结果,存在两个比较大的可能性。
可能一:AI 编程工具qoder中输入过 API Key
我曾经在 AI 编程工具qoder中输入过 OpenAI API Key。
可能二:App 被反编译获取 Key
这是我目前认为更值得警惕的风险。
很多独立开发者为了图方便,会把 OpenAI Key 直接写进 App:
ini
OPENAI_API_KEY=sk-xxxx
或者:
makefile
Authorization: Bearer sk-xxxx
如果这样做:
-
Android APK 可以被反编译
-
iOS IPA 也可以被提取资源和字符串
攻击者完全有机会拿到真实 Key。
如果 Key 一旦暴露,无论应用本身是否加密、是否混淆,都无法阻止别人直接调用 OpenAI API。
因此我也不排除是 App 包中的 Key 被提取后遭到滥用。
为什么预算限制没有拦住?
很多开发者都有一个误区:
设置:
ini
Monthly Budget = $20
就认为最多只会消费 20 美元。
实际上并不是这样。
预算更多是告警机制。
当大量请求同时进入系统时:
-
请求先执行
-
费用后统计
因此即使预算设置为 20 美元,也可能最终产生远超预算的费用。
我的账户就是这样一路从正常余额变成:
-$125.66
我做了什么?
发现问题后,我第一时间:
-
撤销所有 API Key
-
停止相关服务
-
检查项目代码
-
排查 App 包
-
检查 AI 工具配置记录
-
导出 Usage 与 Billing 数据
-
向 OpenAI 提交账单申诉
目前正在等待官方审核结果。
给所有开发者的建议
不要把 OpenAI Key 放在前端。
不要把 OpenAI Key 打包进 App。
不要把 OpenAI Key 提交到 GitHub。
不要多个项目共用同一个 Key。
每个项目单独创建 Key。
定期轮换 Key。
开启 Usage 告警。
发现异常立即撤销所有 Key。
正确的做法永远是:
App
↓
你的后端
↓
OpenAI API
而不是:
App
↓
OpenAI API
因为只要 Key 出现在客户端,理论上就存在被提取的风险。
结语
这次事故总共消耗了超过 1300 万 Tokens。
损失虽然不算特别大,但足以给我上一课。
截至目前,我仍在继续调查 Key 的真实泄露源头。
无论最终结果是 AI 工具配置问题、客户端反编译问题,还是其他我尚未发现的环节,有一点已经非常明确:
在 AI 时代,API Key 的重要程度已经和银行卡密码没有本质区别。
一旦泄露,损失发生的速度可能远超你的想象。
希望这次经历能给所有独立开发者提个醒。