只要一个 GPT 客户端,把一个代码审计员塞入口袋

27 阅读2分钟

很多人已经在用 GPT 写代码了。

但我想问一个更现实的问题:

你敢不敢把“能不能上线”的判断权,交给 GPT?

不是“帮我优化一下”,
不是“有没有更好的写法”,
而是——PASS 还是 FAIL。


一个程序员每天都在经历,却很少被说清的问题

程序员真正痛苦的,往往不是写不出来代码,而是:

  • 改了一版,又被打回
  • Review 意见互相矛盾
  • 安全问题只能“大家都注意点”
  • 到底算不算违规,说不清楚

本质只有一句话:

没有一个可执行、可复现的工程裁决。


直接把代码丢给 GPT,让它“帮我改”,行不行?

行,但只能做到一半。

GPT 很擅长:

  • 改写
  • 重构
  • 补充校验
  • 看起来更“规范”

但它默认不会替你做裁决

因为你没有告诉它:

  • 哪些是不可协商的需求
  • 哪些行为是直接判 FAIL
  • 哪些决策不能用配置解决

我做了一个最小代码审计案例,只验证一个点

技术栈非常普通:

  • FastAPI
  • JWT
  • 多租户
  • 单接口

我只冻结一个工程问题:

tenant_id 的唯一可信来源是什么?

结论也非常简单:

tenant_id 只能来自 JWT payload。

  • 请求参数 ❌
  • Header ❌
  • Path ❌
  • 混合策略 ❌

这不是“最佳实践”,这是工程裁决


为什么这是“代码审计”,而不是“设计讨论”?

因为一旦 tenant_id 来源不唯一,就会出现:

  1. 跨租户访问无法被彻底证明不存在
  2. 安全性依赖“开发者记得住”
  3. Review 变成主观讨论,而不是判断

审计的目标不是“写得好不好”,而是“能不能过”。


我把整个过程拆成了可复现的结构

这个仓库里没有教程,也没有炫技代码,只保留五类东西:

  • requirements.md
    冻结需求,不允许解释和扩展
  • implementation/
    最小实现,只为验证裁决
  • tests
    用失败用例证明边界
  • audit/
    审计输入、拒绝点、差异说明
  • verdict.md
    最终裁决:PASS / FAIL(带原因)

你不需要信我,只需要复现。


GPT 在这里扮演的角色变了

它不是“帮你写代码的助手”,
而是:

  • 执行冻结需求
  • 对照实现
  • 给出裁决
  • 写出审计结论

当输入足够明确时:

一个 GPT 客户端,就可以完成一次完整的代码审计闭环。


为什么我坚持把过程放进仓库?

因为如果:

  • 审计结论不能复现
  • 判定标准不公开
  • 只能“听我说安全”

那它就不叫审计。


项目地址

完整示例(实现 + 审计 + 最终裁决)在这里:

👉 github.com/yuer-dsl/ls…

不用全部看。
你只看 requirements.mdverdict.md 就够了。


写在最后

代码审计不是靠经验堆出来的,
而是靠冻结决策 + 可执行判断

当你开始让 GPT 执行“裁决”,
而不是“给建议”,
它的价值会完全不一样。