L20. 第二次评审 (Code Review):来自黑客的凝视
Vibe Coding 宣言:安全是 1,其他都是 0。没有安全,一切归零。
0. 为什么这一课至关重要? (Why It Matters)
- 信任危机:用户把隐私数据交给你,如果泄露了,你的产品就死了。
- 职业素养:写出不安全的代码,是会被同行鄙视的。
- AI 的盲区:AI 有时候为了方便,会写出硬编码密码的代码。你要帮它把关。
1. 目标 (Goal)
学会使用 SonarLint 或让 Claude 进行 安全审计 (Security Audit),修复 SQL 注入、XSS 等常见漏洞。
2. 核心概念/装备/指令 (The Core)
2.1 常见漏洞 (The Top 3)
- SQL 注入:
SELECT * FROM users WHERE name = 'admin' --'。把--当注释,直接绕过密码。 - XSS (跨站脚本): 在网页里插入恶意 JS 代码。
- 硬编码 (Hardcoding): 把 API Key 直接写在代码里。
2.2 规范 (The Standard)
- PEP8: Python 官方的代码风格指南。
- Pylint: 自动检查代码规范的工具。
3. 实战演练 (Action)
Step 1: 自查硬编码
全局搜索你的代码:
passwordkeytokensecret如果搜到了明文密码,赶紧把它们移到.env文件里!
Step 2: 预防 SQL 注入
错误写法:
python
sql = f"SELECT * FROM users WHERE name = '{name}'"
cursor.execute(sql)正确写法(参数化查询):
python
sql = "SELECT * FROM users WHERE name = ?"
cursor.execute(sql, (name,))Step 3: 让 Claude 审计
把你的代码喂给 Claude:
markdown
# Context
这是我的核心业务代码。
# Task
请你扮演一名白帽子黑客,对这段代码进行安全审计。
重点检查:
1. SQL 注入风险。
2. 敏感信息泄露。
3. 输入验证是否充分。Step 4: 规范性检查
运行 pylint:
bash
pip install pylint
pylint src/根据评分修改代码,争取拿到 10 分。
4. 常见问题 (FAQ - Vibe Style)
Q: 只有几个人用的工具也要考虑安全吗? A: 如果你不想被肉鸡扫描器扫到的话。 互联网上全是自动扫描脚本,它们不分大小,只分有没有漏洞。
Q: Pylint 报错太多了,看着烦怎么办? A: 配置 .pylintrc。 把那些不重要的检查项(比如变量名必须大于 3 个字符)关掉。
Q: Claude 说代码没问题,我就能放心了吗? A: 不能。 永远保持怀疑。关键模块(如支付、登录)最好请真人 Review。
5. 验收标准 (Definition of Done)
- 代码中无任何明文密钥。
- 所有的 SQL 查询都使用了参数化(
?或%s)。 - Pylint 评分 8.0 以上。
- 模块三结业:你的代码不仅能跑,而且跑得稳、跑得安全。
Next Mission: L21. 交互层开发:让数据说话