API密钥硬编码在前端源码中,半夜遭盗刷导致账单激增

来源:互联网 时间:2026-10-29

早上打开控制台,本月账单比上个月多了四倍。调用记录集中在凌晨两点到四点,全是同一个key。IP在三个不同的小机房,UA写着python-requests。站上没人这个点发请求。账单页上还有一行提示,本月用量已经超过历史峰值十倍。

key是半年前写进前端脚本的,为了省一个接口。打包之后它躺在main.js里,一行字符串,搜sk-就能搜到。更省事的是sourcemap,打包时忘了关,原始文件路径和变量名全在里面,等于附了一份说明书。把页面存下来,grep一遍,几秒钟就能拿到。这类泄露不用会任何攻击手段,会按F12就够。

还有一个地方经常被忘掉,git历史里。.env曾经提交过一次,后来删了,但那条commit还在仓库里。公开仓库的话,爬虫扫到只是时间问题。私有仓库也不要当成保险箱,离职的人手里可能还有一份。

发现之后第一件事是作废旧key,不是改代码。在控制台里撤销,立刻生效,旧key再调就是401。新key只配给服务端,前端一律走自己的接口中转。中转这一层顺手做三件小事:按登录用户限速、按接口白名单收敛、把调用日志落到自己的库里。开了sourcemap的记得关掉,或者干脆别在打包里带。有些厂商支持按域名或IP做白名单,开了之后别人拿着key也调不动,这一层能顶一阵。另外把调用日志接上告警,单日费用超过阈值就发短信。

额度上限也要设,别指望账单告警。告警是按天或按月出的,凌晨刷到天亮,等你看到已经晚了。控制台里能设硬上限的直接设,一天几十块封顶。

事后还得查一遍这个key有没有被拿去干别的。有些团队用同一个key跑好几个服务,撤销之后才发现别的也挂了。调用日志按模型分组,看看有没有出现过自己没在用的模型,那是典型的借用。请求里的提示词如果不落库,这一层就查不出来了。

前端直连大模型接口这件事,本身就不该出现在生产里。不管key藏得多深,浏览器里能看到的,别人都能看到。混淆、加密、分段拼接,都只是把时间从五秒拉长到五分钟。真正的边界在服务端,不在客户端。

现在这个站的表单和摘要都走后端,前端只认自己的会话。账单从每月四位数回到两位数。那次泄露留下的习惯是每周扫一遍仓库和打包产物,搜几个固定的前缀。扫一次两分钟,比事后翻账单轻松。

相关文章

标签:

A5创业网 版权所有