当 AI 说“这段代码没问题”时,我们凭什么相信?🛡️ 聊聊 Cloudflare 的 security-audit-skill
凌晨两点,你让 coding agent 跑了一遍安全审计。十分钟后它回来了,语气笃定:“已检查全部代码,未发现高危问题。”你盯着这句话看了三秒,心里冒出一个很朴素的问题——它是真的检查了,还是只是觉得应该这么说?
这不是段子,而是当下 AI 辅助开发里最尴尬的断层之一:让 agent 写代码已经足够顺手,让 agent 对代码的安全结论负责,却依然悬在半空。今天登上 GitHub Trending 的 cloudflare/security-audit-skill,正是冲着这个断层来的。
审计最大的敌人,是自己给自己打分 🤔
传统安全审计里,有一条不成文的纪律:发现漏洞的人,不应该同时是宣布“已修复并验证通过”的人。原因很简单——人会有确认偏误,写下结论之后就会本能地去找支持这个结论的证据。
LLM 把这个毛病放大了。当模型在同一个上下文里既提出假设、又审查假设时,它的“验证”往往只是把刚才的话复述一遍,语气更坚定而已。你得到的不是审计结果,而是一份措辞专业的自我背书。
一个 agent 说“这里存在越权风险”,和它能够独立地、可复现地证明这一点,是两件完全不同的事。
而项目的描述恰好把这两件事写进了名字里:multi-phase security audits with independently verified, machine-readable findings——“多阶段”“独立验证”“机器可读”,三个词精准地踩在了上面这个痛点上。
拆开看:三个关键词各自解决什么 🛠️
多阶段:把一次对话,改成一条流水线
单轮审计的典型失败模式是“一口气给出十条结论,其中三条是真的”。多阶段的价值在于阶段之间可以互相约束:前一个阶段的产出是后一个阶段的输入,而每个阶段的目标不同、关注点不同。这种拆分让审计过程从“一个大而全的回答”变成“一条有中间产物的链路”——出现分歧时,你能定位到是哪一环出了偏差,而不是只能接受一个黑盒结论。
独立验证:运动员不能兼任裁判
“independently verified”是这个项目最值得玩味的部分。它意味着“发现了什么”和“确认它真的成立”被刻意分开,验证环节需要重新走一遍证据链路,而不是简单地复述前面的判断。
对使用者来说,这带来的最大变化是:报告里的每一条结论都带着“它凭什么成立”的痕迹。你不再是选择相信 agent 的口气,而是可以去看它的证据。
机器可读:让结论离开聊天窗口
这可能是最容易被低估、却最影响落地的一点。
自然语言写的安全结论,最大的问题是它无法被处理。它没法在 CI 里做 diff,没法在两次扫描之间去重,没法统计“上个月那批问题还剩几条没收口”。它只能躺在聊天记录里,等下一次被人遗忘。
机器可读的 findings 把结论变成了数据:可以比对、可以追踪、可以接进已有的流程。下面是一个概念性示意(具体字段与格式请以仓库文档为准):
{
"severity": "high",
"location": "path/to/module",
"issue": "对用户可控输入的处理路径缺少边界约束",
"evidence": "……指向具体代码位置的证据链……",
"verification": "……独立复现的验证过程……",
"status": "confirmed"
}
重点不在字段名,而在于这份结构天生是为“被后续程序消费”而设计的。安全结论一旦能被程序消费,它才真正具备被管理的可能。
放进真实工作流,它长什么样 🚀
抛开抽象的架构讨论,这类 skill 最有价值的几个落点其实很日常:
- 接手陌生仓库时:先用它跑一轮,快速拿到一份带证据的问题清单,比逐文件读代码快得多。
- 大改之前的基线:在动手重构前留一份审计快照,事后对照,能清楚看到自己是引入了新问题还是保持了原状。
- 依赖或配置变更后:把审计当成一次结构化的复查,而不是凭感觉判断“应该没影响”。
- 开源发版前的自查:多一双不厌其烦的眼睛,总比少一双好。
使用方式上,它是一份 coding-agent skill,也就是说你需要把它接入自己惯用的 agent 环境,然后以自然语言驱动:
> 用 security-audit-skill 对当前仓库做一次完整审计,
重点关注认证、授权与外部输入的处理路径,
最后输出机器可读的 findings。
值得注意的是那句“重点关注”。审计范围收得越窄,独立验证的质量通常越高——让 agent 审一切,往往等于什么都没审。
几个务实的期待管理 ⚠️
- 它不是 SAST 的替代品。规则引擎擅长穷举已知模式,agent 擅长理解和推理,两者的强项并不重叠。
- “独立验证”验证的是可复现性,不是不存在性。一条结论没有被确认,不等于问题不存在;一次审计通过,也不等于代码安全。安全这件事从来没有“已证明无菌”的终点。
- 效果高度依赖底层 agent 的能力。skill 提供的是一套流程纪律,不是魔法。纪律能让好的判断更可靠,但变不出本来就没有的判断力。
- 先在小范围试跑。选一个你最熟悉、最清楚问题在哪的模块,看看它找出来的东西是否对得上你的认知——这是最省事的质量校准方式。
写在最后 💡
如果把视线拉远一点,cloudflare/security-audit-skill 真正有意思的地方,或许不在于它具体审计了什么,而在于它代表的一种转向:agent 生态正在从“让 AI 更多地产出”,走向“让 AI 为产出负责”。
写代码的 agent 已经很多了。愿意给自己加一道独立验证、并且把结论整理成可被程序消费的格式的,还不多。这中间差的不是模型能力,而是工程纪律——而纪律这件事,恰恰是 skill 这种形态最擅长承载的。
所以,下次当 agent 对你说“没问题”的时候,不妨先问一句:证据呢?谁来验证?结论能导出吗? 一个好用的 agent,应该答得上来。📦