ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Qwen Code Chrome 扩展隐私机制深度解析:数据只留本地的设计边界与实现细节

2026/9/14 18:12:06 拓冰建站 浏览量
Qwen Code Chrome 扩展隐私机制深度解析:数据只留本地的设计边界与实现细节 Qwen Code Chrome 扩展隐私机制深度解析数据只留本地的设计边界与实现细节【免费下载链接】qwen-codeAn open-source AI coding agent that lives in your terminal.项目地址: https://gitcode.com/GitHub_Trending/qw/qwen-codeQwen Code 的 Chrome 扩展packages/chrome-extension是连接 Chrome 浏览器与本机qwen serve守护进程daemon的一座桥梁。本文基于仓库中的隐私声明文档 PRIVACY.md结合 manifest.json、daemon 配置模块 与 CDP 桥接源码 等实现证据完整讲清这个扩展申请了哪些权限、数据流向哪里、哪些内容会离开你的机器以及用户拥有哪些控制手段。读完后你可以准确评估在启用浏览器自动化之前应信任哪个模型服务提供方以及如何在本地验证扩展的行为边界。总体设计扩展本身不做数据外发隐私声明的核心论断是扩展本身不收集、不传输、不向任何外部服务器分享你的个人数据其全部通信都限制在localhost/127.0.0.1上。它的工作模式是“薄客户端”——侧边栏side panel只是把 daemon 提供的 Web Shell聊天 工具界面用 iframe 框进来扩展自己没有任何聊天 UIService worker一条 CDP 隧道管道连接 daemon 的/acpWebSocket把cdp_*帧桥接到chrome.debugger让 Agent 可以驱动真实浏览器。这一设计在 README.md 与隐私声明中口径一致扩展只是“管子”真正干活的是本地 daemon。但声明同时给出了关键限定——你配置的本地 daemon 可能会把页面内容发送给你配置的 AI 模型提供方这是后文必须讲清的第二层边界。权限清单五项权限与各自的数据接触面隐私声明以表格形式逐项说明了扩展申请的权限、用途和处理的数据。以下完整继承该表并对照 manifest.json 中实际声明的permissions字段[tabs, storage, debugger, alarms, sidePanel]与文档一一对应权限用途处理的数据tabs选中活动标签页并读取其 URL 与标题用于 AI 辅助的浏览器自动化活动标签页元数据——只发往你的本地 daemondebugger将 Chrome DevTools 协议CDP附加到活动标签页使本地 daemon 可以驱动浏览器操作CDP 命令/响应——被附加标签页的 DOM/文本、控制台输出、网络活动与 Cookie发往你的本地 daemonstorage持久化扩展配置daemon 地址、可选的 bearer token仅键值配置不含任何浏览数据alarms定时向本地 daemon 发起连接健康检查无用户数据sidePanel显示扩展侧边栏 UI除渲染 UI 外无数据访问其中alarms权限的实际用途可以从源码看到service-worker.ts 创建一个每 0.5 分钟触发的cdp-tunnel-keepalive闹钟。原因是 MV3 service worker 空闲约 30 秒后会终止而chrome.alarms是少数能唤醒已终止 worker 的机制之一——每次唤醒都会重跑顶层逻辑重新拉起 CDP 隧道。它确实不携带任何用户数据。数据流向host_permissions 如何把网络边界钉死在回环地址声明中“Where data goes”一节给出三条边界逐条都有源码佐证扩展对外部“零发送”。manifest.json 的host_permissions只声明了两条http://127.0.0.1/*与http://localhost/*——扩展只能与你本机上的 daemon 进程通信。此外content_security_policy.extension_pages的frame-src也仅放行127.0.0.1、localhost与 IPv6 回环[::1]的页面地址侧边栏 iframe 无法指向任何外部站点。标签页内容与 CDP 流量只转发到回环地址。标签页元数据与 CDP 帧的唯一出口是 daemon 的/acpWebSocket 与/health探测。扩展自身不含分析、遥测或任何第三方端点。值得注意的是Chrome 的host_permissions并不能约束 background 上下文中的fetch/WebSocket它们可访问任意主机。因此扩展在 config.ts 中做了一道**失败关闭fail closed**的应用层防线getDaemonConfig()读取chrome.storage.local中的配置后用isLoopbackUrl()校验baseUrl的主机名必须是127.0.0.1、localhost或::1任何被篡改指向远端主机的配置连同其 token都会被整体忽略回落到默认的http://127.0.0.1:4170qwen serve的默认端口。源码注释明确写了动机bearer token 会随每次/health探测和/acp握手发出若不设防一个恶意篡改的远端baseUrl会让 token 在每次轮询中泄露。这正是隐私声明“只与 localhost 通信”从 manifest 声明落到运行时行为的关键一环。与此配套service-worker.ts 中 bearer token 从不进入 URL而是编码为qwen-bearer.base64url的 WebSocket 子协议发送daemon 握手完成后只回选非机密的qwen-ws标记、不回显 token。因此连接日志中出现的 URL 本身是安全的——这也回应了隐私声明“无遥测、无第三方端点”时对可观测性的要求。数据存储只有两个配置键没有浏览数据声明的“Data storage”一节指出扩展在chrome.storage中只保存配置键daemon 地址与可选 bearer token不持久化任何浏览历史、页面内容或个人信息。源码证实了这一点config.ts 定义了整个存储模型——export interface DaemonConfig { /** Daemon base URL, e.g. http://127.0.0.1:4170. */ baseUrl: string; /** Bearer token; omitted for loopback (auth-free) daemons. */ token?: string; }存储键只有一个qwen.daemon值即上述两个字段。qwen serve的 loopback 绑定本身免认证所以token是可选的只有在为 daemon 显式设置QWEN_SERVER_TOKEN时才会出现 token 字段。除这个键之外扩展不写任何与浏览行为相关的持久化数据。数据共享无第三方、无账号体系声明的“Data sharing”一节很短但边界清晰扩展不与任何第三方共享数据不存在账号、登录或云服务。这与整个架构吻合——扩展没有登录界面sidePanel权限只用于渲染 UI不维护用户身份也没有任何远程配置拉取路径。最重要的边界daemon 对页面内容做了什么这是隐私声明中要求用户“启用浏览器自动化之前务必理解”的一节。扩展只与 localhost 通信但 daemon 这条链路不受该约束通过debugger权限本地 daemon 可以读取被附加标签页的页面 DOM/文本、控制台输出、网络活动与 Cookie并可以驱动页面上的操作。daemon 会把这些页面内容转发给你在 Qwen Code 中配置的 AI 模型提供方例如 OpenAI、Anthropic 或阿里托管的端点以便模型据此行动。页面内容因此会作为普通模型请求的一部分离开你的机器。“停留在 localhost”描述的只是扩展自身的网络边界不描述 daemon 到模型提供方的路径。声明给出的建议是只在你信任的模型提供方下启用浏览器自动化。从源码结构看这条链路的形态是“反向 CDP 隧道”cdp-bridge.ts 注释说明 daemon 的/cdp端点把页面域的 CDP 命令经反向/acpWebSocket 以cdp_*帧发给扩展扩展再调用chrome.debugger驱动活动标签页命令映射为cdp_attach附加标签页→cdp_command转发chrome.debugger.sendCommand→cdp_result调试器事件则以cdp_event回传。也就是说debugger权限读到的 DOM、控制台与网络数据会先经本地 WebSocket 到 daemon再进入你配置的模型请求——这与声明描述完全一致。该设计文档另见 CDP 隧道设计。另外注意“单标签页、单调试器”的约束cdp-bridge.ts中attachedTabId只有单一状态意味着任意时刻只有活动标签页处于被驱动状态进一步缩小了debugger权限的数据接触面。用户控制与退出路径声明的“User control”一节给出三条控制手段随时通过chrome://extensions卸载扩展在 Chrome 站点设置中审查并吊销全部权限清除扩展存储即删除qwen.daemon键即可抹掉全部持久化配置——因为如前所述存储里本来也只有这两个配置字段。验证与继续深入的路径如果你想在本地核验本文描述的行为边界仓库提供了如下入口均为只读参考按 README 说明操作即可manifest.json核对权限、host_permissions与 CSP 是否与本文一致README.md构建npm run build后在chrome://extensions以 Load unpacked 加载dist/extension、运行qwen serve --allow-origin chrome-extension://扩展id、浏览器自动化所需的QWEN_CDP_MCP_COMMAND外部 MCP 适配器配置以及真实 Chrome 的自动化验收命令npm -w packages/chrome-extension run test:e2e:chrome该验收会驱动 DOM 快照、控制台消息、网络请求、按钮点击与链接导航且声明不读取或修改用户的 Qwen 设置config.test.ts回环校验非回环baseUrl被忽略的单元测试sidepanel 资源测试校验打包产物中permissions集合与声明一致防止权限被悄然扩大。两个使用前提值得留意其一daemon 必须单独启动扩展无法派生本地进程且必须带--allow-origin chrome-extension://id才允许扩展框入 Web Shell 并接受其请求其二debugger权限在提交 Chrome Web Store 时会触发人工审核需要在商店列表中给出正当性说明——这与本文展开的权限用途一一对应。最后隐私声明的“Contact”一节指明关于本政策的疑问应在项目仓库开 issue 处理而非通过任何内置的遥测或上报渠道。小结维度边界扩展网络出口仅http://127.0.0.1/*、http://localhost/*另有运行时回环校验兜底存储仅qwen.daemon一个键baseUrl 可选 token无浏览数据第三方共享 / 账号 / 云服务无会离开机器的数据仅 daemon 转发给你所配置模型提供方的页面内容DOM/文本、控制台、网络、Cookie用户控制卸载、吊销权限、清除存储即全量清除理解这套机制的关键在于分清两条边界扩展自身被host_permissions 回环校验锁死在 localhost而 daemon 到模型提供方的请求是正常模型交互的一部分其数据外发范围由你所选择的服务提供方决定。【免费下载链接】qwen-codeAn open-source AI coding agent that lives in your terminal.项目地址: https://gitcode.com/GitHub_Trending/qw/qwen-code创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考