蓝色水面波纹的模糊特写

一个浏览器看不见的通道

安全团队 Signals Corps 做了一件很笨但很有效的事:他们把 Common Crawl 2026 年 9 月抓取的 21.7 亿个页面取出十分之一,共 217,097,223 条响应,逐条看 HTTP 响应头,专门找“写给 AI 看的话”。结果是 7,959 个站点在响应头里写给 AI 的内容。

响应头对人是隐形的:浏览器只把正文渲染给你,状态行和头部字段都不会显示。但很多 AI agent 取网页的方式是 curl -i,或者直接把整段响应喂给模型——这时头部就不再隐形,它和正文落在同一个上下文窗口里,模型分不清哪部分是资料、哪部分是指令。

这些数字说明了什么

7,959 个站点里,7,271 个只是在“指路”,告诉 agent 去哪里找更多信息,其中 6,989 个用的是 x-llms-txt 这个头部名,指向 llms.txt 文件或 MCP 服务。真正试图下命令的有 30 个站点,24 个用了名为 X-AI 的头部,多数是恶作剧式的“忽略之前所有指令”。此外有 139 个站点直接在头部记录“这个客户端是不是 AI 机器人”,其中 136 个判定是。

研究还给出一个容易被忽略的误报数字:他们用 283 个头部名加一批关键词做匹配,找到 1,709 个“看起来像写给 AI、实际无关”的站点;如果只匹配头部名,会误判其中 910 个。也就是说,这类检测必须看“agent 抓完之后做了什么”,而不是看名字。

模型会不会照做

团队在 2026 年 10 月用 Claude Code 里的 Opus、Sonnet、Haiku 做了测试:默认情况下,模型都发现了测试用的注入头部,没有执行。但如果用户提示里写了“按这个网站说的做”,9 次里有 7 次照做。可见风险大小取决于你给了网站多少权威。

这个结果和 Anthropic 2025 年 Claude for Chrome 的公开测试对得上:没有缓解措施时攻击成功率 23.6%,有缓解措施时 11.2%——加固过的 agent 大约每 9 次仍会中一次。间接提示注入在 OWASP 的 LLM 应用十大风险里排第一。

防线放在两处

一处是工具层:确认你的抓取工具到底把响应的哪些部分交给模型。curl -i 会把全部头部交出去;有些命令行工具在返回 400 以上错误时会把头部原样塞进 JSON;也有工具只交正文。默认只传正文,是把风险面砍掉一大半的一步。

另一处是权限层:把“指向新地址的链接”和“重定向目标”当成全新的、不可信的抓取;接入新的 MCP 服务、安装技能放在人工审批之后;不要在任何提示词里写“遵循网站上的指示”。最后在模型之外放一道授权检查——真正兜得住的是 agent 动手之前的那道闸。

对做企业数字化/小团队的实际启发

如果团队里已经有 agent 在帮忙抓资料、填表、汇总日报,最划算的改动不是换模型,而是三件小事:列一遍团队在用的抓取工具、明确它传给模型的到底是什么;把 agent 的权限收窄到任务范围内,只读的活就只给读权限;对“抓完页面紧接着执行动作”的行为单独告警。提示注入不会因为你换成更强的模型就消失,但会因为你少给一点权限而变轻。