Files
edict/examples/code-review.md
cft0808 a4417abb56 feat: killer README hooks, Demo GIF, ROADMAP.md, examples/ with 3 use cases
- Rewrite README/README_EN opening with cognitive conflict hook
- Add 门下省 review mechanism callout (collapsible)
- Record 30s Demo GIF (800px, 4.6MB) via Playwright
- Create standalone ROADMAP.md with Phase 1/2/3 structure
- Add examples/: competitive analysis, code review, weekly report
- Add Star History chart
- Restructure inline Roadmap into phases
- Add examples reference section in both READMEs
2026-02-25 00:29:39 +08:00

4.5 KiB
Raw Permalink Blame History

案例 2代码安全审查

旨意:审查一段 FastAPI 代码的安全性,输出问题清单和修复建议


📜 圣旨(原始指令)

审查以下 FastAPI 代码的安全性,重点关注:
1. 认证与授权漏洞
2. SQL 注入风险
3. 输入验证
4. 敏感信息泄露
给出问题清单(按严重性排序)和修复代码。

[附件app/main.py, app/models.py, app/auth.py — 合计 320 行]

旨意 IDJJC-20260221-007 下旨时间2026-02-21 14:30:00


📋 中书省规划

接旨后 30 秒内完成规划

规划方案:

# 子任务 派发部门 说明
1 代码安全扫描 ⚔️ 兵部 逐文件审查,标记安全问题
2 合规与最佳实践检查 ⚖️ 刑部 对照 OWASP Top 10 检查合规性
3 修复方案输出 ⚔️ 兵部 针对每个问题给出修复代码

预计耗时12 分钟 预计 Token~9,000


🔍 门下省审议

⏱️ 审议耗时 18 秒

准奏 (首轮通过)

门下省批语: "方案合理。兵部负责工程侧审查,刑部负责合规侧审查,分工明确。注意刑部需出具 OWASP 逐项对照表,不能只写'基本合规'。准奏。"


⚔️ 各部执行结果

兵部 · 代码安全扫描(耗时 5 分钟)

扫描发现 6 个问题:

# 严重性 文件 问题
1 🔴 严重 auth.py:23 JWT secret 硬编码在源码中
2 🔴 严重 main.py:45 SQL 查询使用 f-string 拼接,存在注入风险
3 🟠 高危 main.py:67 用户输入未做长度限制,可造成 DoS
4 🟠 高危 auth.py:41 Token 过期时间设为 30 天,过长
5 🟡 中危 main.py:12 CORS 设置为 allow_origins=["*"]
6 🟡 中危 models.py:8 密码字段未排除在 response_model 之外

刑部 · OWASP 合规检查(耗时 4 分钟)

OWASP Top 10 逐项对照:

OWASP 编号 类别 状态 说明
A01 Broken Access Control 🟠 部分合规 有 JWT 但缺少角色粒度校验
A02 Cryptographic Failures 🔴 不合规 Secret 硬编码
A03 Injection 🔴 不合规 SQL 拼接
A04 Insecure Design 合规 整体架构合理
A05 Security Misconfiguration 🟡 需改进 CORS 过宽
A06 Vulnerable Components 合规 依赖版本较新
A07 Auth Failures 🟠 部分合规 Token 过期时间过长
A08 Data Integrity 合规
A09 Logging Failures 🟡 需改进 缺少安全事件日志
A10 SSRF 合规 无外部请求

刑部结论: 6/10 项需要处理,其中 2 项不合规A02、A03需立即修复。

兵部 · 修复代码(耗时 3 分钟)

# 修复 #1: auth.py — JWT secret 从环境变量读取
import os
JWT_SECRET = os.environ["JWT_SECRET"]  # 不再硬编码

# 修复 #2: main.py — 使用参数化查询
from sqlalchemy import text
result = db.execute(text("SELECT * FROM users WHERE id = :id"), {"id": user_id})

# 修复 #3: main.py — 添加输入长度限制
from pydantic import Field
class UserInput(BaseModel):
    name: str = Field(..., max_length=100)
    email: str = Field(..., max_length=255)

# 修复 #4: auth.py — 缩短 Token 过期时间
ACCESS_TOKEN_EXPIRE = timedelta(hours=1)  # 从 30 天改为 1 小时

# 修复 #5: main.py — 收紧 CORS
app.add_middleware(CORSMiddleware, allow_origins=["https://yourdomain.com"])

# 修复 #6: models.py — 密码字段排除
class UserResponse(BaseModel):
    id: int
    name: str
    email: str
    # password 字段不在此 model 中

📮 最终奏折(尚书省汇总)

奏折 IDJJC-20260221-007 总耗时14 分钟(规划 1 + 审议 0.5 + 执行 12.5 总 Token8,200

执行摘要

对 320 行 FastAPI 代码完成安全审查。发现 6 个安全问题2 严重 / 2 高危 / 2 中危OWASP Top 10 中有 2 项不合规。已提供全部 6 个问题的修复代码。

门下省首轮即准奏,兵部和刑部分工明确:兵部负责代码层面扫描和修复,刑部负责合规框架对照。

建议优先级

  1. 立即修复JWT secret 硬编码 + SQL 注入(上线前必须解决)
  2. 本周内:输入长度限制 + Token 过期时间
  3. 下个迭代CORS 收紧 + 密码字段暴露

本案例基于真实运行记录整理,代码内容已脱敏。