欢迎光临
我们一直在努力

【AI】API 密钥泄露亏几千上万?AI 开发必须掌握的安全避坑手册

在这里插入图片描述

🔥小龙报:个人主页 🎬作者简介:C++研发,嵌入式,机器人方向学习者 ❄️个人专栏:《AI》《工科必装软件安装教程》 ✨ 永远相信美好的事情即将发生

在这里插入图片描述

前言

虽然我们用Cursor写代码,但是一定要掌握基本的一些安全常识。避免自己导致金钱和账单损失!例如数据库连接地址和密码该如何存放?AI平台的密钥应该如何保存在才安全? 比如DeepSeek API。这些服务通常按调用次数或用量收费,需要使用你的 API 密钥访问。如果你的 API 密钥泄漏,任何人都可以盗用你的账号调用 API,可能在短短几个小时内产生数千甚至数万元的账单。

一、AI时代下的安全概念

1.1 安全铁律

记住一条安全铁律: 所有的敏感数据都不能放在前端!都要写在后端,并且通过环境变量引入。

前端包括:

  • 网页前端代码
  • 浏览器插件
  • 小程序代码
  • iOS或者浏览器插件
  • 1.2 敏感数据

    • API 密钥 (API Keys)

      • 例如:OpenAI API Key、阿里云访问密钥、Dify和Coze的密钥。
      • 风险:
        • 他人可能使用你的 API 密钥调用服务,产生高额账单。
        • 可能导致账户停用或服务被滥用。
    • 数据库连接信息

      • 例如:数据库 URL、用户名、密码(如 Supabase、PostgreSQL、MongoDB 等)。
      • 风险:
        • 数据泄漏,用户隐私暴露。
        • 数据库可能被攻击者删除、篡改。
    • 支付相关信息

      • 例如:Stripe、支付宝、微信支付的密钥、商户密钥。
      • 风险:
        • 攻击者可能利用支付密钥发起虚假支付请求,导致经济损失。
    • 云服务的凭证信息

      • 例如:AWS、腾讯云、阿里云的 Access Key 和 Secret Key。
      • 风险:
        • 攻击者可能控制你的云服务器或资源,产生高额账单或盗取数据。

    1.3 如何保护敏感信息

    二、最佳实践

    2.1 使用环境变量

    2.1.1 什么是环境变量

    简单来说,环境变量就是存储在你电脑或服务器上的一种特殊的变量,用来保存那些可能会经常变化、或者敏感的配置信息,

    比如:

    • API 密钥(例如调用 OpenAI 接口的密钥)
    • 数据库连接地址、密码
    • 网站地址、端口号
    • 不同环境(本地开发、线上部署)的配置信息

    2.1.2 为什么使用环境变量

    假设你在编程中直接把API 密钥或密码写在代码里,就像把银行卡密码直接贴在你家门口一样危险,任何人都能轻松看到。这是非常不安全的做法。 而环境变量的好处就是:

    • 安全:敏感数据(密码、API密钥)不会暴露在代码中。
    • 灵活:不同的环境(开发环境、测试环境、生产环境)可以使用不同的变量值,而不用修改代码本身。
    • 方便:修改配置时,直接改动环境变量即可,不用重新修改代码或程序逻辑。
    🚧2.1.2.1 环境变量保存位置

    通常环境变量会存储在一个特殊的文件中,比如 .env 或 .env.local,这个文件一般不会上传到网络上的公共代码仓库中(比如 GitHub),从而保护你的敏感信息。你可以通过 .gitignore 文件,告诉 Git 不要上传这些敏感文件:

    # .gitignore
    .env
    .env.local
    .env.*

    📌2.1.2.2 实例

    比如你开发一个应用程序需要调用 OpenAI 接口,此时你会获得一个 API 密钥:

    • ❌ 不好的做法(在代码里直接写死):

    const apiKey = 'sk-你的密钥123'; // 非常危险,谁都能看到!

    • ✅ 好的做法(使用环境变量):

    你先设置一个环境变量,比如叫做 OPENAI_API_KEY:

    OPENAI_API_KEY=sk-你的密钥123

    然后,你在后端代码中这样使用:

    const apiKey = process.env.OPENAI_API_KEY; // 安全地引用环境变量

    这样一来,你的代码里不再直接暴露敏感信息,安全性大大提高。

    2.1.3 💡 小结

    • 环境变量就是存放敏感或经常改变的配置信息的变量。
    • 环境变量可以保护敏感数据,避免暴露在代码中。
    • 推荐把环境变量放在单独的文件中,如 .env 或 .env.local,并且不上传到 GitHub 等代码仓库。

    2.2 Next.js 中安全存储环境变量

    Next.js 内置支持环境变量,推荐的做法如下:

  • 在项目根目录创建 .env.local 文件(默认已在 .gitignore 中,不会上传到 GitHub):

    NEXT_PUBLIC_EXAMPLE=https://example.com/api
    SECRET_API_KEY=你的敏感API密钥

    • NEXT_PUBLIC_ 开头的变量是公开的,前端可访问。
    • 不带 NEXT_PUBLIC_ 的变量仅用于服务端,前端无法访问。
  • 在 Next.js 应用中访问环境变量:

    // 前端页面中访问 (仅限 NEXT_PUBLIC_ 开头)
    const apiUrl = process.env.NEXT_PUBLIC_EXAMPLE;

    // API 路由或服务端组件中访问敏感变量
    const apiKey = process.env.SECRET_API_KEY;

  • 部署到 Vercel 等平台时,必须在平台控制台中配置相同名称的环境变量,确保服务端安全读取。

  • 2.3 Supabase 数据库安全:别让人随便访问

    使用 Supabase 时,默认的表权限并非完全安全。你需要主动配置权限:

    • 开启 Row Level Security (RLS),确保每一行数据都有严格的访问控制。
    • 结合 Supabase Auth 用户身份认证,数据仅对授权用户可见。

    例如:

    — 启用 RLS
    ALTER TABLE your_table ENABLE ROW LEVEL SECURITY;

    — 仅允许认证用户访问自己的数据
    CREATE POLICY "User can access own data"
    ON your_table FOR SELECT USING (auth.uid() = user_id);

    2.4 客户端缓存风险:小心你的浏览器

    • 不要在浏览器的 localStorage 中保存敏感数据(如 用户密码、用户完整隐私信息)。

    2.4.1 错误示范

    localStorage.setItem('userPassword', 'my_secret_password');
    localStorage.setItem('accessToken', 'jwt_token_here');

    2.4.2 错误示范

    localStorage.setItem('userInfo', JSON.stringify({
    fullName: '张三',
    idCard: '310123199001011234',
    phoneNumber: '13800138000',
    bankAccount: '6222021234567890123',
    homeAddress: '详细住址…'
    }));

    2.4.3 错误示范

    localStorage.setItem('paymentInfo', JSON.stringify({
    cardNumber: '4111111111111111',
    cvv: '123',
    expiryDate: '12/25'
    }));

    • 如果一定要存储临时数据,推荐使用 sessionStorage 或更安全的 HttpOnly Cookie。

    例如设置 HttpOnly Cookie:

    代码块

    // Next.js API Route示例
    res.setHeader('Set-Cookie', 'token=your_token; HttpOnly; Secure; SameSite=Strict; Path=/');

    2.5 设置api使用额度

    例如像https://openrouter.ai这些产品,你可以给你的API Keys设置额度,这样你就可以避免即使在遭遇泄露、盗刷的情况下,损失也有一个上限。 在这里插入图片描述

    三、部署前安全检查清单

    检查项完成 ✓
    API 密钥没有写在代码中
    环境变量配置正确(本地 + Vercel)
    GitHub 未上传敏感文件
    Supabase 已启用并配置 RLS
    已设置身份认证(Supabase Auth)
    客户端未存储敏感信息
    已设置 API 使用额度

    总结

    ✨ 本文讲解AI开发时代的程序安全要点,核心原则是敏感数据禁止暴露在前端,应当存放后端并通过环境变量读取。API密钥、数据库凭证切勿硬编码到源码,.env文件通过gitignore拒绝提交到代码仓库。浏览器不要用localStorage保存隐私,优先HttpOnly Cookie。数据库开启RLS行级安全,给API密钥配置调用额度规避盗刷风险,部署前对照清单逐项检查,规避资金泄露与数据安全隐患。 在这里插入图片描述

    赞(0)
    未经允许不得转载:171主机测评 » 【AI】API 密钥泄露亏几千上万?AI 开发必须掌握的安全避坑手册
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址