
如何理解 AI 浏览器智能体的安全边界爪爪 PawWork 的 QuickJS 沙箱、tab 租约与无服务器设计剖析【免费下载链接】BrowserKittenPaw Work - selection-first web agent for Chrome: select on the live page, describe the outcome, take away an editable office file. BYOK, sandboxed, no server.项目地址: https://gitcode.com/gh_mirrors/pa/BrowserKitten爪爪 · PawWorkPawWork_ZhuaZhua是一款 Chrome MV3 浏览器智能体扩展你在已登录的网页上选中内容、描述想要的结果它就能自动操作页面并把成果带走成可编辑的办公文件。它自带模型BYOK自带 API Key、代码在沙箱内运行、完全没有服务器——会话、密钥、交付物全部留在本地。正因为一个能替你点网页的 AI Agent 天然危险本文将带你快速看懂它是怎么画好安全边界的。一图看懂安全靠进程分层不靠自觉PawWork 不是单页应用。Chrome 把它的代码拆进 5 类进程每一层能做什么、不该做什么在 AGENTS.md 里有明确契约层职责硬性禁区侧栏 Side panel渲染对话、收集输入不跑模型、不持有存储Service Workersrc/background.js权限面标签、下载、sys系统调用不跑模型循环Offscreensrc/offscreen/runtime.js会话仓库 Agent 工具循环不直接碰 DOM /chrome.tabsContent script页面选区与action执行无会话语义Sandboxsrc/sandbox/runtime.js执行模型生成的访客 JS没有任何chrome.*关键思想危险能力被集中到最少的进程里其余进程想越权也拿不到句柄。QuickJS 沙箱模型写的代码为什么出不来Agent 的run工具会执行模型生成的 JavaScript——这是最危险的动作。PawWork 的答案是 src/agent/vnext/adapters/codeRuntime.js 里的 QuickJS-WASM 隔离独立 WASM 堆访客代码运行在自己的 QuickJS 运行时里天然没有宿主的window、document封禁探测失败即关闭运行时主动把chrome、fetch、localStorage、indexedDB等 15 个名字定义成一访问就抛错的陷阱属性。恶意探测代码不会悄悄拿到宿主数据而是以非零退出码失败资源限额内存上限、512KB 栈上限、超时 deadline 中断处理器死循环会被强制打断沙箱页二次隔离在扩展环境中代码实际跑在 manifest.json 声明的sandbox.pages页面里sandbox allow-scripts 独立 CSP。这个页面注释写得直白——No chrome.* — FS and sys are postMessage RPCs连文件读写都要发消息请宿主代劳。访客可用的sys浏览器接口tab 管理、fetch、截图等只是系统调用门面真正的实现全部在服务 Worker 端src/agent/vnext/host/browserSysHost.js并带并发上限最多 128 个在途调用与操作级超时。网络守卫AI 指哪儿fetch 不能打哪儿扩展持有all_urls权限如果没有这道闸模型可以把 fetch 打到你的内网。src/agent/vnext/primitives/netGuard.js 在宿主侧执行网络策略注释原话Runtime Policy lives in the host, not the prompt拦截localhost、.local/.lan/.internal等内网名拦截 RFC1918 私有段、169.254链路本地含云元数据端点169.254.169.254、CGNAT、IPv6 ULA/链路本地甚至::ffff:a.b.c.d这种 IPv4-mapped 马甲只放行公网http(s)其余一律NET_DENIED。tab 租约多个会话抢同一个标签页怎么办两个会话同时操作同一个网页页面状态就会互相踩踏。src/agent/vnext/host/tabLease.js 用一张MaptabId, { sessionId, executionId }做跨会话互斥锁会话 A 占用 tab 12 后会话 B 的页面动作直接得到TAB_LEASED错误同一会话同一执行内重入是允许的reentrant执行结束、中止或关闭标签时自动释放。它的诚实之处同样写在注释里Not a journal: process death drops the map——Service Worker 被 Chrome 杀掉后锁会丢因此它只做互斥不承诺跨崩溃的精确一次语义。无服务器设计数据与密钥都不出门BYOK, sandboxed, no server 是 PawWork 的三件套对应到实现上自带 Key模型密钥填在侧栏存于chrome.storage.local请求直连你配置的 OpenAI 兼容端点src/agent/provider.js会话本地持久化会话仓库用 IndexedDB OPFS 存在本机src/agent/vnext/sessionWorkspace/durableStore.js不经过任何第三方中转边界诚实AGENTS.md「未实现的边界」一节明确列出没有跨崩溃 exactly-once截图不是原子快照出不了浏览器等硬边界——知道能力到哪里为止本身就是安全设计的一部分。小结PawWork 的安全模型可以浓缩成四句话危险代码关进 QuickJS 沙箱、浏览器特权收敛到 Worker 系统调用、网络请求经宿主守卫、并发冲突用 tab 租约互斥再加上全程无服务器。对于想自建浏览器 Agent 的开发者这套进程分层 宿主策略 诚实边界的清单是一份可以直接抄的参考答案。【免费下载链接】BrowserKittenPaw Work - selection-first web agent for Chrome: select on the live page, describe the outcome, take away an editable office file. BYOK, sandboxed, no server.项目地址: https://gitcode.com/gh_mirrors/pa/BrowserKitten创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考