2025-11-07-独立开发踩坑实录API密钥泄露有多危险

后端编程创业
返回博客列表

API 密钥泄露有多危险?

最近在研究 Supabase,发现很多独立开发者都容易忽略一个问题:API 密钥泄露。

为什么前端环境变量不安全?

很多人以为用了 .env 文件就安全了,其实不是。前端代码最终会打包到浏览器里,所有环境变量都会被替换成实际值。

你可以试试:打开你的网站,按 F12,在 Sources 里搜索你的 API 密钥关键词,很可能就能找到。或者直接在 Network 标签里看请求头,Authorization 里的密钥完全暴露。

环境变量在构建时就被替换了,打包后的 JS 文件里就是明文。混淆只能让代码难读,但密钥还在,完全没用。

iOS APP 也有风险

你以为只有网页有问题?iOS APP 也不安全。虽然代码编译成二进制了,但网络请求可以抓包。

用一些抓包工具,连接手机后,所有 API 请求都能看到。你的 API 密钥就在请求头里,完全暴露。

真实后果

如果 API 密钥泄露了,会发生什么?

别人复制你的密钥,在自己的项目里用。消耗的是你的 API 配额,产生的费用是你来付。如果恶意用户大量调用,可能产生巨额费用。

唯一安全方案

唯一的解决方案,就是把 API 密钥放在服务器上。Supabase 的 Edge Functions 就是做这个的。

它是运行在服务器端的 TypeScript 函数,API 密钥存储在服务器环境变量里,用户完全看不到。前端只调用 Edge Function,Edge Function 再去调用第三方 API。

这样,密钥永远不会出现在用户的浏览器或 APP 里,只在服务器上运行。即使有人抓包,也只能看到前端调用 Edge Function 的请求,看不到真正的 API 密钥。

在 Supabase 中部署

第一步:创建 Edge Function。安装 Supabase CLI,登录后创建新函数。

第二步:编写代码。在函数文件里,用 Deno.env.get('OPENAI_API_KEY') 获取密钥,然后调用第三方 API。密钥只在服务器上,用户看不到。

第三步:设置环境变量并部署。在 Dashboard 的 Secrets 里添加密钥,然后部署函数。前端调用 Edge Function 的 URL,传参数就行。

整个过程很简单,但安全性提升巨大。免费版有足够额度,个人项目完全够用。

常见场景

Edge Functions 适合这些场景:

AI 调用:保护 OpenAI、Claude 等 API 密钥。在 AI 编程场景中,嵌入大模型是非常常用的场景,这个特别需要保护。支付回调:处理 Stripe、支付宝等 webhook。邮件发送:调用 Resend、SendGrid 等邮件服务。

所有需要私密 API 密钥的场景,都应该用 Edge Functions。特别是 AI 相关的功能,现在独立开发者几乎都会用到,安全更关键。免费版额度够用,部署也简单。

总结:安全无小事

作为独立开发者,可能觉得自己的项目小,没人关注。但 API 密钥泄露的风险真实存在,后果可能很严重。

用 Edge Functions 把密钥藏在服务器上,这是必须掌握的最佳实践。别等出事了才后悔。