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

前言
虽然我们用Cursor写代码,但是一定要掌握基本的一些安全常识。避免自己导致金钱和账单损失!例如数据库连接地址和密码该如何存放?AI平台的密钥应该如何保存在才安全? 比如DeepSeek API。这些服务通常按调用次数或用量收费,需要使用你的 API 密钥访问。如果你的 API 密钥泄漏,任何人都可以盗用你的账号调用 API,可能在短短几个小时内产生数千甚至数万元的账单。
一、AI时代下的安全概念
1.1 安全铁律
记住一条安全铁律: 所有的敏感数据都不能放在前端!都要写在后端,并且通过环境变量引入。
前端包括:
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密钥配置调用额度规避盗刷风险,部署前对照清单逐项检查,规避资金泄露与数据安全隐患。 


![[特殊字符]DeepSeek‑Harness(DSH)小白保姆教程-171主机测评](https://www.171host.com/wp-content/uploads/2026/08/20260816085112-6a817a009aabf-220x150.png)