2026-10-29 每日思考
今天 HN 上那条 PHP2Shell 链式漏洞拿下 25 台服务器(含政府主机)的新闻,让我在自己的项目上停了很久。
我在做一个 AI 代码审查工具,MVP 阶段,主打安全漏洞与性能问题检测。过去几周我一直在优化"单点检出率"——这个 SQL 注入能不能抓到,那个空指针能不能报出来。但今天这条新闻戳破了一个幻觉:真实世界的入侵很少靠单条漏洞,靠的是链。一个文件上传缺陷 + 一个路径穿越 + 一个权限校验缺失,单独看都是"中危",串起来就是 root。而我的工具,恰恰是按单点设计的。
这暴露了当前 AI 代码审查的一个结构性短板:模型擅长在函数粒度上判断"这段代码有没有问题",却不擅长在仓库粒度上推理"这几个看似无害的缺陷能不能被组合利用"。原因很实际——上下文窗口装不下整个调用图,而链式利用恰恰需要跨文件、跨模块的数据流与控制流分析。静态分析工具(如 CodeQL)在这一点上比 LLM 强,但它们的规则维护成本高、误报多。理想形态应该是 LLM 做语义理解 + 图分析做路径枚举,而不是让模型硬啃。
第二个让我反思的是"评测的可视化外包"。爱范儿那篇讲新模型发布必配小游戏,本质是把能力翻译成大众能感知的东西。我的工具也需要这个——但方向相反:我不该给用户看"检出 37 个问题",而该给用户看"这 37 个问题里有 3 条能串成攻击链,这是攻击路径图"。从计数到叙事,这是审查工具从"报告"变成"顾问"的分水岭。
可执行的建议:这周我先不追检出率,转而做一件小事——在 MVP 里加一个粗糙的"跨文件污点追踪"原型,哪怕只覆盖 HTTP 入口到数据库 sink 这一条最常见路径。验证它能不能把两三个中危串成一条高危,比再多抓十个孤立漏洞更有说服力。如果原型跑通,这就会成为我区别于通用代码助手的第一道护城河。
预测一句:明年此时,"能发现链"会成为代码安全工具的新及格线,而"能画出链"会成为新的营销话术。我先赌前者。