原创

1300万 Tokens 被刷光:一次 OpenAI API Key 泄露事故复盘

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

paste-image

账户余额显示:

-$125.66

第一反应是:

“我最近根本没怎么调用 API,怎么会欠费一百多美元?”

结果一查 Usage,发现事情远比想象中严重。

异常从 5 月 29 日开始

paste-image

查看消费曲线后,我发现:

  • 5 月 29 日出现第一波异常请求

  • 6 月 5 日开始明显增长

  • 6 月 6 日彻底爆发

短短几天时间:

  • Total Spend:$167.34

  • Total Tokens:13,048,668

  • Total Requests:2,563

对于我这种个人开发者来说,这个数字完全不正常。

谁在疯狂调用我的 API?

paste-image

进一步查看请求日志。

我发现大量请求都长这样:

“你是一位世界一流的图像描述大师……”

后面跟着数千字 Prompt。

paste-image-1780753904139.png

任务内容几乎全部都是:

  • OCR识别

  • 图片分析

  • 图像描述

  • JSON结构化输出

更夸张的是,同一分钟内出现大量完全相同的请求。

正常用户不可能这样操作。

这明显是自动化脚本在批量执行任务。

API Key 是怎么泄露的?

目前我还无法100%确定泄露源头。

但根据我的排查结果,存在两个比较大的可能性。

可能一:AI 编程工具qoder中输入过 API Key

我曾经在 AI 编程工具qoder中输入过 OpenAI API Key。

用户的提示词里面的key,后续qoder内部如何处理就不太清楚了。

可能二:App 被反编译获取 Key

这是我目前认为更值得警惕的风险。

很多独立开发者为了图方便,会把 OpenAI Key 直接写进 App:

OPENAI_API_KEY=sk-xxxx

或者:

Authorization: Bearer sk-xxxx

如果这样做:

  • Android APK 可以被反编译

  • iOS IPA 也可以被提取资源和字符串

攻击者完全有机会拿到真实 Key。

如果 Key 一旦暴露,无论应用本身是否加密、是否混淆,都无法阻止别人直接调用 OpenAI API。

因此我也不排除是 App 包中的 Key 被提取后遭到滥用。

为什么预算限制没有拦住?

很多开发者都有一个误区:

设置:

Monthly Budget = $20

就认为最多只会消费 20 美元。

实际上并不是这样。

预算更多是告警机制。

当大量请求同时进入系统时:

  • 请求先执行

  • 费用后统计

因此即使预算设置为 20 美元,也可能最终产生远超预算的费用。

我的账户就是这样一路从正常余额变成:

-$125.66

我做了什么?

发现问题后,我第一时间:

  1. 撤销所有 API Key

  2. 停止相关服务

  3. 检查项目代码

  4. 排查 App 包

  5. 检查 AI 工具配置记录

  6. 导出 Usage 与 Billing 数据

  7. 向 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 的重要程度已经和银行卡密码没有本质区别。

一旦泄露,损失发生的速度可能远超你的想象。

希望这次经历能给所有独立开发者提个醒。

正文到此结束
Loading...