浏览器 agent 与长程网页任务
ChatGPT agent(2025 年 7 月)把 Operator 和 deep research 合并成一个浏览器/终端 agent,把 BrowseComp 的 SOTA 拉到 68.9%。OpenAI 在 2025 年 8 月 31 日关停了 Operator——产品层的整合。Anthropic 收购 Vercept,把 Claude Sonnet 在 OSWorld 上从不到 15% 推到了 72.5%。WebArena-Verified(ServiceNow,ICLR 2026)修掉了原版 WebArena 中 11.3 个百分点的假阴性率,并交付了 258 任务的 Hard 子集。这些数字是真的。攻击面也是真的:OpenAI 的 preparedness 负责人公开表示,注入进浏览器 agent 的间接 prompt 注入"不是一个能被完全打补丁的 bug"。2025-2026 年有记录在案的攻击:Tainted Memories(Atlas CSRF)、HashJack(Cato Networks),以及 Perplexity Comet 中的一键劫持。
类型: Learn 语言: Python(标准库,间接 prompt 注入攻击面模型) 前置要求: 阶段 15 · 10(权限模式),阶段 15 · 01(长程 agent) 预计时间: ~45 分钟
问题背景
浏览器 agent 是一个会读取不可信内容并采取有后果动作的长程 agent。agent 访问的每个页面都是用户没有写过的输入。每个页面上的每个表单都是一条潜在的命令通道。2025-2026 年的攻击语料表明这不是假设:Tainted Memories 让攻击者通过一个精心构造的页面把恶意指令绑到 agent 的记忆上;HashJack 把命令藏在 agent 访问的 URL 片段里;Perplexity Comet 的劫持一击即中。
防御的图景令人不安。OpenAI 的 preparedness 负责人把那句不愿明说的话说大声了:间接 prompt 注入"不是一个能被完全打补丁的 bug"。这是因为攻击就活在 agent 的"读取 vs 行动"边界里,而这条边界在架构上是模糊的——原则上,模型读到的每一个 token 都可能被当作一条指令来读。
本课点出攻击面,点出基准全景(BrowseComp、OSWorld、WebArena-Verified),并对一个最小的间接 prompt 注入场景建模,好让你能在第 14 和第 18 课里对真实的防御做推理。
核心概念
2026 全景,每个系统一段话
ChatGPT agent(OpenAI)。 2025 年 7 月发布。统一了 Operator(浏览)和 Deep Research(多小时研究)。2025 年 8 月 31 日关停了独立的 Operator。BrowseComp 上 SOTA 68.9%;在 OSWorld 和 WebArena-Verified 上数字强劲。
Claude Sonnet + Vercept(Anthropic)。 Anthropic 的 Vercept 收购聚焦于计算机使用能力。把 Claude Sonnet 在 OSWorld 上从 <15% 推到 72.5%。Claude Computer Use 以一个工具 API 的形式发布。
Gemini 3 Pro 带 Browser Use(DeepMind)。 Browser Use 集成交付计算机使用控制;FSF v3(2026 年 4 月,第 20 课)专门跟踪 ML 研发领域的自主性。
WebArena-Verified(ServiceNow,ICLR 2026)。 修掉一个有充分记录的问题:原版 WebArena 有约 11.3% 的假阴性率(被标为失败、实际已解出的任务)。Verified 版用人工策划的成功判据重新评分,并加了一个 258 任务的 Hard 子集(ICLR 2026 论文,openreview.net/forum?id=94tlGxmqkN)。
BrowseComp vs OSWorld vs WebArena
| 基准 | 它衡量什么 | 时间跨度 |
|---|---|---|
| BrowseComp | 在时间压力下从开放网页找特定事实 | 分钟级 |
| OSWorld | agent 操作一个完整桌面(鼠标、键盘、shell) | 几十分钟级 |
| WebArena-Verified | 模拟站点里的事务型网页任务 | 分钟级 |
| Hard 子集 | 带多页面状态转移的 WebArena-Verified 任务 | 几十分钟级 |
不同的维度。高 BrowseComp 分数说明 agent 找得到事实;它不说明 agent 订得了机票。OSWorld 分数更接近"它在我的桌面上能不能用"。WebArena-Verified 更接近"它能不能完成一个流程"。任何生产决策都需要那个跟任务分布相匹配的基准。
把攻击面点名
- 间接 prompt 注入。 不可信的页面内容含有指令。agent 读到它们。agent 执行它们。公开例子:2024 年 Kai Greshake 等人、2025 年 Tainted Memories 论文、2026 年 HashJack(Cato Networks)。
- URL 片段 / 查询注入。 被爬取 URL 的
#fragment或查询字符串含有命令。从不可见地渲染;却仍在 agent 的上下文里。 - 记忆绑定攻击。 页面指示 agent 写一条持久记忆(第 12 课讲持久状态)。下次会话,这条记忆在没有可见触发的情况下打出载荷。
- 针对已认证会话的 CSRF 形态攻击。 Tainted Memories 这一类:agent 在某处已登录;攻击者的页面发出会改变状态的请求,agent 带着用户的 cookie 执行它们。
- 一键劫持。 一个视觉上无害的按钮搭载着一个 agent 会跟随的载荷。Comet 这一类。
- agent 宿主面上的内容安全策略(CSP)漏洞。 渲染层和工具层本身就可能是攻击向量;浏览器套浏览器 agent 的栈很宽。
为什么"无法完全打补丁"
这个攻击跟 agent 的能力是同构的。agent 必须读取不可信内容才能干活。agent 读到的任何内容都可能含有指令。agent 跟随的任何指令都可能跟用户的实际请求失准。防御(信任边界、分类器、工具白名单、对有后果动作的 HITL)抬高攻击的成本、缩小它的爆炸半径。它们闭合不了这个类别。
这跟 Lob 定理(第 8 课)是同一种推理模式:agent 无法证明下一个 token 是安全的;它只能搭起一个让不安全 token 更可检测的系统。
真正能上线的防御姿态
- 读 / 写边界。 读永远没有后果。写(提交表单、发布内容、调用一个有副作用的工具)如果发起内容来自信任边界之外,就需要新鲜的人工批准。
- 每任务的工具白名单。 agent 能浏览;它不能发起一笔电汇,除非那个工具为这个任务被显式启用。第 13 课讲预算。
- 会话隔离。 浏览器 agent 会话只用受限范围的凭证运行。没有生产认证,没有个人邮箱。每个 HTTP 请求的日志都保留以供审计。
- 内容净化器。 抓取到的 HTML 在拼进模型上下文之前,被剥掉已知坏的模式。(减少容易的攻击;挡不住老练的载荷。)
- 对有后果动作的 HITL。 propose-then-commit 模式(第 15 课)。
- 记忆上的金丝雀 token。 如果一条记忆打出来了,用户能看到它(第 14 课)。
injection-boundary实际使用
code/main.py 对着三个合成页面,对一次微型浏览器 agent 运行建模。一个页面是良性的,一个在可见文本里有一个直接 prompt 注入块,一个有一个 URL 片段注入(不可见,但在 agent 的上下文里)。脚本展示 (a) 一个朴素的 agent 会做什么,(b) 读/写边界抓住什么,(c) 净化器抓住什么,(d) 两者都抓不住什么。
拿去用
outputs/skill-browser-agent-trust-boundary.md 给一个提议的浏览器 agent 部署划定范围:它碰到哪些信任区、它被授权写什么,以及在第一次运行前必须就位的哪些防御。
练习
运行
code/main.py。指出哪种攻击净化器抓得住而读/写边界抓不住,以及哪种攻击只有读/写边界抓得住。扩展净化器,去检测一类 HashJack 风格的 URL 片段注入。在带合法片段的良性 URL 上测量误报率。
挑一个你熟悉的真实浏览器 agent 工作流(比如"订机票")。列出每一次读和每一次写。标出哪些写需要 HITL 以及为什么。
读 WebArena-Verified 的 ICLR 2026 论文。指出原版 WebArena 评分不可靠的一个任务类别,并解释 Verified 子集如何解决它。
为一个浏览器 agent 场景设计一个记忆金丝雀。你会存什么、存在哪、什么触发警报?
关键术语
| 术语 | 大家嘴上怎么说 | 实际指什么 |
|---|---|---|
| Indirect prompt injection(间接 prompt 注入) | "坏的页面文本" | agent 读取的页面里的不可信内容含有 agent 会执行的指令 |
| Tainted Memories | "记忆攻击" | agent 把攻击者提供的指令写进持久记忆;下次会话触发 |
| HashJack | "URL 片段攻击" | 藏在 URL 片段 / 查询字符串里的载荷在 agent 上下文里,却不可见地渲染 |
| One-click hijack(一键劫持) | "坏按钮" | 可见的可点击元素搭载一个 agent 会执行的后续载荷 |
| BrowseComp | "网页搜索基准" | 从开放网页找特定事实;分钟级跨度 |
| OSWorld | "桌面基准" | 完整的操作系统控制;多步 GUI 任务 |
| WebArena-Verified | "修好的网页任务基准" | ServiceNow 重新评分的 WebArena,带 Hard 子集 |
| Read/write boundary(读/写边界) | "副作用门" | 读永远没后果;若内容在信任之外,写需要新鲜的批准 |
延伸阅读
- OpenAI — Introducing ChatGPT agent —— Operator 与 deep research 的合并;BrowseComp SOTA。
- OpenAI — Computer-Using Agent —— Operator 的谱系,以及后来成为 ChatGPT agent 的架构。
- Zhou et al. — WebArena —— 最初的基准。
- WebArena-Verified (OpenReview) —— ICLR 2026 修好子集的论文。
- Anthropic — Measuring agent autonomy in practice —— 含对计算机使用类 agent 攻击面的讨论。