独立调查:ChatGPT 的 __obi 跨站 Cookie 可将站外浏览行为关联到 ChatGPT 账号

来源:Hacker News 热门(buzzing.cc 中文翻译) 2026年9月20日 02:05 AIHOT 评分:76 精选
摘要:作者通过自己手机上的流量捕获复现了 OpenAI 广告收集器机制:bzr.openai.com 在 .openai.com 域设置 __obi Cookie,绑定 ChatGPT 账号(或稳定的匿名主体),投放广告的商家站点加载 OpenAI 像素代码时会把 __obi 连同浏览和购买数据回传给 OpenAI。
# 独立调查:ChatGPT 的 __obi 跨站 Cookie 可将站外浏览行为关联到 ChatGPT 账号 - 来源:Hacker News 热门(buzzing.cc 中文翻译) - 作者:lmbbuchodi - 发布时间:2026-09-21 02:05 - AIHOT 分数:76 - AIHOT 标记:精选 - AIHOT 链接:https://aihot.news/items/cmua567e703tmro5t558lzx7o - 原文链接:https://www.buchodi.com/chatgpt-now-knows-what-you-do-on-other-websites-via-ad-collector ## 精选理由 作者以第一手流量捕获复现了 OpenAI 广告收集器的跨站追踪机制,读者可以据此理解 ChatGPT 账号与站外浏览行为的关联路径。 ## AI 摘要 作者通过自己手机上的流量捕获复现了 OpenAI 广告收集器机制:bzr.openai.com 在 .openai.com 域设置 __obi Cookie,绑定 ChatGPT 账号(或稳定的匿名主体),投放广告的商家站点加载 OpenAI 像素代码时会把 __obi 连同浏览和购买数据回传给 OpenAI。 ## 正文 OpenAI 的广告收集器位于 bzr.openai.com,会设置一个名为 __obi 的 cookie,作用域限定为 .openai.com。该值在你使用 ChatGPT 期间存在,并与你的 ChatGPT 账户绑定。随后,__obi 会从你访问的普通网站发送给 OpenAI。 任何在 ChatGPT 上购买广告的公司都会在自己的网站上安装一小段 OpenAI 代码,就像零售商已经安装 Meta 和 Google 的追踪代码一样。加载这段代码会将 __obi 连同你正在浏览的页面数据一起发送给 OpenAI。这包括你正在搜索的产品、正在阅读的文章以及购买行为。 归根结底,OpenAI 可以将你在这些网站上的行为与你的 ChatGPT 账户关联起来。 我在自己的手机上复现了完整机制,用两种独立的捕获方法进行了验证,并与覆盖 1,029 个主机名上 936 个不同广告主像素的、长达数月的观测流量进行了交叉核对。 工作原理 第 1 步。ChatGPT 创建一个标识符并对其进行签名。 在 chatgpt.com 上,客户端生成 16 个随机字节,并调用 POST /backend-api/bazaar/obi/sync-token(未登录时则调用 /backend-anon/)。后端返回一个 RS256 JWT: { "iss": "chatgpt-wadi", "aud": "bzr.openai.com", "purpose": "obi_sync", "operation": "set", "consent_decision": "analytics_allowed", "consent_policy_version": "user_granular_consent_v1", "sub": "«redacted: 64-hex account subject»", "subject_type": "account_user", "obi": "«redacted: 22-char identifier»", "exp": "«iat + 60s»" } sub 是账户。obi 是标识符。token 将二者绑定,作用域限定于收集器,并在 60 秒后过期。bzr 代表 bazaar,即 OpenAI 内部对广告平台的称呼;wadi 是签发服务。 第 2 步。该标识符成为 OpenAI 域名下的一个 cookie。 客户端将 {"token": "«JWT»"} 跨站 POST 到 bzr.openai.com/v1/obi/sync。响应如下: Set-Cookie: __obi=«redacted»; Domain=.openai.com; HttpOnly; Max-Age=31536000; Path=/; SameSite=none; Secure SameSite=none 与 Secure 是 cookie 在跨站请求中被发送所需的配置。Max-Age 为一年。JWT 中的 obi 值与 cookie 中的值完全相同。 第 3 步。广告主网站将其回传。 有三类请求会从广告主的页面发往 OpenAI 的主机。在一台 jar 中含有 __obi 的手机上,这三类请求都携带了它: 请求 携带了 __obi 备注 GET bzrcdn.openai.com/sdk/oaiq.min.js 是 脚本本身的加载 POST bzr.openai.com/v1/sdk/events 与 obref 是 转化事件 POST bzr.openai.com/v1/sdk/events,裸请求体 是 该 SDK 的“无凭据”路径 GET bzrcdn.openai.com/pixel-config/… 完全没有 cookie 头 对照组 第一行尤其值得关注。像素 SDK 有一条省略凭据的代码路径,但这无济于事:在 OpenAI 的任何代码运行之前,浏览器就已经把 cookie 附加到了加载该 SDK 的