安全与合规
一旦涉及账号、权限、付款、隐私、生产数据,就必须从“能跑就行”切到工程化流程——这一章就是那条线。
你将学会
- 正确管理密钥与凭证,泄露后知道怎么救;
- 判断自己碰了哪些敏感数据、该怎么保护;
- 认识输入校验与几类常见漏洞;
- 管理依赖供应链与许可证;
- 认识 AI 特有的风险(提示注入、数据外泄、生成代码许可证)。
前置知识
编程心智模型速成(环境变量与密钥一节)。
一、密钥与凭证
- 只走环境变量:写进
.env,或平台的密钥面板; - 不进仓库:
.env加入.gitignore; - 不进前端:带
VITE_/NEXT_PUBLIC_前缀的变量是公开的; - 泄露应急:立刻在平台后台作废并重新生成——改代码没用,历史记录里还在。
自查:全文搜索 key、token、password、secret,看有没有硬编码。
二、用户数据与隐私
先回答三个问题:
- 收集了什么?(越少越好:能不收就不收)
- 存在哪?(本地 / 自己的服务器 / 第三方云)
- 谁能看到、留多久、怎么删?
红线:不要收集与功能无关的个人信息;涉及实名、支付、位置、健康等敏感数据时,必须有专门的合规设计与审查,不能“顺手做着玩”。
三、输入校验与常见漏洞
所有来自用户的东西都不可信——表单、URL 参数、上传文件、接口返回。
| 漏洞 | 一句话 | 最低防护 |
|---|---|---|
| 注入 | 把用户输入当命令/查询执行 | 不拼接字符串,用参数化 |
| XSS | 用户输入里的脚本被执行 | 输出转义,别直接塞 HTML |
| 越权 | 改了 URL 就能看别人数据 | 每次请求都校验“这是不是你的” |
| 弱口令/无鉴权 | 后台谁都能进 | 鉴权 + 最小权限 |
一句话原则:默认不信任输入,默认最小权限。
四、依赖供应链
- 锁版本:用 lockfile,避免自动升到有问题的版本;
- 看审计:
npm audit之类工具能报已知漏洞; - 数一数:为一个小功能引入几十个包,风险与维护成本都会上来;
- 看许可证:确认依赖的许可证允许你的使用方式(商用/开源各有约束)。
五、AI 特有的风险
| 风险 | 说明 | 对策 |
|---|---|---|
| 提示注入 | 网页/文件里的恶意文字诱导 AI 做危险操作 | 不把不可信内容直接当指令;关键操作要人工确认 |
| 数据外泄 | 把敏感内容贴进对话、或让 AI 联网发送 | 脱敏;不贴密钥与真实用户数据 |
| 生成代码许可证 | AI 可能产出与训练数据相似的代码 | 关键项目做来源核查,保留许可说明 |
给 AI 的边界要写进提示或项目指令文件:不改动密钥、不发起外部请求、不执行未确认的危险命令。
六、上线前安全检查清单
- 仓库里没有密钥、
.env、真实用户数据; - 所有用户输入都做了校验与转义;
- 涉及他人数据的接口都校验了权限;
- 依赖来源清楚,锁了版本,无高危漏洞;
- 线上密钥用平台环境变量,未进代码;
- 有备份与回滚方案;
- 涉及身份 / 付款 / 外部写操作时,已做专门设计与审查。
动手练习
- 全文搜索
key/token/password/secret,确认没有硬编码; - 跑一次依赖审计(如
npm audit),看有没有高危项; - 列出你的项目“碰了哪些敏感数据、分别怎么保护”。
检查点
- 能列出本项目涉及的敏感数据与保护方式;
- 能说出密钥泄露后的应急步骤;
- 能对一次上线安全自查给出结论。
常见问题
Q:个人小项目也要这么严吗? 只看本地、不碰他人数据的玩具项目可以放宽。一旦上公网、一旦碰别人的数据,就必须按上面的清单走。
Q:把报错贴给 AI 会不会泄露? 会——报错里可能带密钥、内网地址、用户数据。先脱敏再贴。
小结与下一步
安全不是“最后加一道锁”,而是从第一行代码起的习惯。接下来可以进入进阶:AI 应用开发。