Simon Willison 谈提示注入:强模型可能已不危险,但"证明它安全"才是真难题 · 干货攻略

  • 链接: https://x.com/simonw/status/2113484746999411051
  • 分类: x-tips
  • 来源: X @simonw
  • 作者: Jay
  • 更新: 2026-10-24

这是什么

这不是一个工具或库,而是一次威胁模型立场的变化。

2026-10-23 凌晨,Simon Willison 回应 @nateberkopec 的质疑。Nate 说他想了一年 Simon 提出的 "lethal trifecta"(致命三角):一个 Agent 同时具备①读私有数据、②接触不可信内容、③具备对外通信能力,理论上就能被一次提示注入偷走数据;"据我所知这在真实世界里从没被演示过,只存在于研究环境,我们是不是该停止围绕这个威胁模型设计约束了?"

Simon 的回复(原帖):

"I'm cautiously starting to suspect it may not be a problem with today's strongest models - Anthropic in particular are very confident about their ability to avoid prompt injections - but it's still a real concern for cheaper, weaker models"

译:目前最强的模型(Anthropic 尤其有信心)可能已经不再是问题,但便宜、弱一些的模型仍然是真实风险。

他在同一串下的续帖(2113484950460870846)补了关键半句:

"The bigger problem is /proving/ it - I'm not sure how to get to full confidence that a model or agent harness has solved it to the point that we don't have to worry any more"

译:更大的问题是证明它——我没把握能确信某个模型或 Agent harness 已经把它解决到"再也不用担心"的程度。

所以这条帖的真正干货不是"安全了",而是:防御重心正在从"堆护栏"转向"选模型 + 做可验证的工程约束",而且验证本身是当前最大缺口。


核验来源

原始推文及上下文(已读) - Simon Willison 原帖:https://x.com/simonw/status/2113484746999411051(2026-10-23 04:16 UTC,约 26.8K 浏览,回复 @nateberkopec) - 父帖 Nate Berkopec:https://x.com/nateberkopec/status/2113477667555315978 - Simon 同串续帖:https://x.com/simonw/status/2113484950460870846

一手技术出处(已读) - Simon Willison 博客《The lethal trifecta for AI agents: private data, untrusted content, and external communication》,2025-06-16:https://simonwillison.net/2025/Jun/16/the-lethal-trifecta/ - Anthropic 官方文档《Mitigate jailbreaks and prompt injections》:https://platform.claude.com/docs/en/test-and-evaluate/strengthen-guardrails/mitigate-jailbreaks - Anthropic 官方研究博客《Mitigating the risk of prompt injections in browser use》:https://www.anthropic.com/research/prompt-injection-defenses

关键说法对照

说法 出处结论 状态
三角构成:私有数据 + 不可信内容 + 对外通信 Simon 博客原文列出 ✅
官方文档区分"越狱/直接注入"与"间接注入"两类威胁模型 Anthropic 文档原文 ✅
Claude Opus 4.5 在浏览器场景下对内部 Best-of-N 攻击者 ASR 为 1%,Anthropic 明说"远未解决" Anthropic 研究博客原文 ✅
Anthropic 用 RL 训练 + 分类器扫描进入上下文的不可信内容 Anthropic 研究博客原文 ✅
未受信任内容只能放进 tool_result,不能进 system / 普通 user 文本块 Anthropic 文档原文 ✅
用 Claude Haiku 5.5 做轻量筛查,stop_reason: "refusal" 视为有害判定 Anthropic 文档原文 ✅

⚠️ 需注意:Anthropic 官方口径是 1% ASR 仍有意义风险,并没有说"强模型已经解决了提示注入"。Simon 的"强模型可能已不成问题"是他个人的谨慎推测,与厂商官方口径并不等价。


上手步骤

1. 先做工具能力审计(而不是先买护栏产品)

按三角三项给每个工具打标:

私有数据:读邮箱 / 本地文件 / 数据库 / 密钥
不可信内容:网页 / 邮件正文 / PR / issue 评论 / OCR / 第三方 API 返回
对外通信:HTTP 请求 / 加载图片 / 生成可点击链接 / 发消息 / 提交 PR

硬规则:任一执行路径上三者不得同时齐备。 拆掉任意一个环即可——去掉对外通信(无外网)、去掉私有数据读、或把不可信内容隔离到独立会话。

2. 结构上把"数据"和"指令"分开

Anthropic 文档给的官方做法:

  • 第三方内容只放在 tool_result 块里,绝不放 system prompt 或普通 user 文本块
  • 在工具 description 里说明内容来源("来自未知发件人的邮件正文")
  • system prompt 中显式声明不可信内容政策(模板见官方文档的 <untrusted_content_policy>)
  • 用 JSON 编码包裹第三方字符串,攻击者无法靠闭合引号/标签"逃逸"成指令
  • 不要把自己的指令写进 tool_result,会连带被标记为可疑;指令放在 tool_result 之后的 user turn

3. 给工具输出加一道筛查

和筛用户输入同一套模式:工具原始输出先过一遍 Claude Haiku 5.5,用 structured outputs 约束成可解析的布尔判定(如 contains_injection),只有判定为否才作为 tool_result 返回给主模型。

官方同时提醒:Haiku 5.5 跑安全分类器时可能自己拒答,因此 stop_reason: "refusal" 必须当作"有害"处理,而不是"通过"。

4. 最小权限 + 沙箱

不给模型它不需要的密钥;工具跑在沙箱里;权限尽量窄。这一条对弱模型尤其关键——Simon 明确说弱模型仍会被注入成功。

5. 用"可证明性"而不是"安全感"收口

既然无法证明强模型绝对安全,上线标准应改为可测量的:注入成功率指标、工具输出筛查命中率的回归测试、人工审批闸门。Simon 指出 95% 的拦截率在 Web 安全里是不及格分数,不要为这类宣传买单。


适用边界

  • 这不是"可以放松安全设计"的许可。Simon 自己随即补充"证明"是更大难题,Anthropic 官方也说 1% ASR 仍代表实质风险。
  • 模型强弱这条轴只对间接注入成立。直接越狱(用户本人即攻击者)与模型能力无关,威胁模型不同,官方文档要求分别处理。
  • 官方文档的缓解措施面向 Claude 生态。tool_result 隔离、JSON 编码这类做法有 Claude 官方的训练与分类器配合;对自托管小模型只能作为启发式,不能等价于"解决"。
  • 元讨论层面:Nate 的质疑(真实世界从未演示)与 Simon 的回应都停留在个人判断,没有公开的野外案例可以引为定论——本指南没有找到官方材料证明该组合"已在生产环境被证实被利用"。
  • 未在原帖出现的产品名、版本号、仓库均未纳入;本文不推荐任何具体护栏商业产品。

一句话结论

Simon 这条帖的干货是一个优先级反转:过去两年大家拼命堆护栏,现在该做的是——用最强的模型扛住注入、在工程上拆掉"致命三角"的任意一环、把不可信内容关进 tool_result,并把"能否证明安全"当成下一个真正的难题,而不是假装它已经解决。