5.3.6 永远审查代码:最重要的安全习惯
经过本节学习,你将了解:
- 为什么代码审查如此重要
- 如何审查你不完全理解的代码
- 关于"自动批准模式"的建议
- 建立可持续的审查习惯
令人担忧的数据
根据 2025 年的开发者调查:
- 只有 67% 的开发者在部署前审查代码
- 超过 40% 的初学者承认部署了不完全理解的 AI 生成代码
- 33% 的开发者表示会直接复制粘贴 AI 生成的代码
这意味着:很多人正在使用他们并不真正理解的代码。
什么是"真正的"Vibe Coding?
Simon Willison(AI 领域知名专家、Django 核心贡献者)对此有一个有趣的观点:
"如果 AI 写了所有代码,但你审查、测试并理解了它,那不是 Vibe Coding——那是用 AI 当打字助手。"
换句话说:
| 做法 | 类型 | 风险 |
|---|---|---|
| AI 生成 → 审查 → 测试 → 部署 | 用 AI 辅助开发 | 较低 |
| AI 生成 → 直接部署 | 纯 Vibe Coding | 较高 |
我们在本教程中倡导的是有意识的 AI 辅助开发:充分利用 AI 的能力,但保持人类的判断和审查。
如何审查你不完全理解的代码
你可能会想:我是初学者,根本看不懂代码,怎么审查?
好消息是:你不需要完全理解每一行代码,就可以进行有意义的审查。
检查项一:敏感信息
即使不懂代码,你也能识别这些模式:
javascript
// 问自己:这里有没有看起来像密钥的东西?
const key = "sk-abc123..." // 这看起来像密钥
const key = process.env.KEY // 这是正确的方式检查项二:可疑的网络请求
留意代码是否在向你不认识的地址发送数据:
javascript
// 问自己:这个网址是我知道的服务吗?
fetch("https://api.openai.com/...") // 正常,OpenAI 官方
fetch("https://random-site.xyz/steal-data") // 可疑检查项三:文件操作
注意代码是否在读写文件,特别是敏感路径:
javascript
// 问自己:为什么要读取这些文件?
fs.readFile("~/.ssh/id_rsa") // 危险!在读取 SSH 私钥
fs.readFile("./data.json") // 正常,读取项目内的数据检查项四:让 AI 帮你审查
你可以让另一个 AI(或同一个 AI)来检查代码:
请审查以下代码,检查是否有:
1. 硬编码的密钥或密码
2. 可疑的网络请求
3. 不安全的文件操作
4. 其他安全隐患
[粘贴代码]技巧
用一个 AI 来审查另一个 AI 的代码,可以发现一些明显的问题。但这不能替代你自己的判断。
关闭自动批准模式
一些 AI IDE 提供了"自动批准"或"Yolo 模式",允许 AI 不经你确认就执行命令或修改文件。
初学者应该关闭此功能。
原因:
- 你需要看到 AI 在做什么,才能学习
- AI 可能做出你不想要的更改
- 如果出错,你无法及时阻止
每个操作都手动确认,虽然慢一点,但更安全,也能帮助你理解发生了什么。
建立可持续的审查习惯
代码审查不需要花很多时间。建立以下习惯:
每次 AI 生成代码后:
- [ ] 快速扫一眼,有没有看起来像密钥的字符串
- [ ] 如果有网络请求,确认目标地址是你知道的
- [ ] 如果看不懂某段代码在做什么,问 AI 解释
每次准备提交/部署前:
- [ ] 运行安全检查清单(5.3.4 节)
- [ ] 确认 .env 文件没有被包含
定期回顾:
- [ ] 检查项目依赖是否需要更新
- [ ] 确认没有新的安全警告
记住这个原则
核心原则
AI 生成的代码,最终责任在你。
这不是为了吓你,而是提醒你:保持审查习惯,是保护自己的最好方式。
