一枚 Cookie,名字叫 __obi,挂在 .openai.com 域下,有效期整整一年。它的响应头里写着 SameSite=None——这是让浏览器在跨站请求里也把它带上的配置。而在同一批请求里,OpenAI 的其他 Cookie 全被浏览器拦了下来,只有它被放行。
9 月 20 日,独立研究者 Buchodi 发布了一份逆向分析:任何在 ChatGPT 上投过广告的公司,只要在自己站点装上 OpenAI 的追踪代码,你在这家网站上看过的商品、读过的文章、填过的表单,就会连着一枚能对上你 ChatGPT 账号的标识,回到 OpenAI 手里。这份分析当天冲上 Hacker News 头版,我记录到的数据是 698 分、371 条评论。
三步:从你的 ChatGPT 账号,到别人家的网站
第一步发生在你打开 chatgpt.com 的那一刻。浏览器生成 16 字节随机数,调用 POST /backend-api/bazaar/obi/sync-token;后端签回一枚 RS256 的 JWT,60 秒后过期,里面把 sub(账号标识)和 obi(22 字符标识)钉在一起。bzr 是 bazaar 的缩写,OpenAI 内部对广告平台的叫法。
第二步是换 Cookie。客户端拿着这枚令牌,跨站 POST 给 bzr.openai.com/v1/obi/sync,服务器回种 __obi:域为 .openai.com、HttpOnly、Secure、有效期一年、SameSite=None。研究者贴出的响应头原文如此。
第三步发生在广告主的网站上。装了 OpenAI 测量像素的页面,会把 __obi 随请求一起送回 OpenAI——包括加载 bzrcdn.openai.com/sdk/oaiq.min.js 这个脚本本身的请求。也就是说,页面一打开、OpenAI 的代码还没运行,标识就已经送出去了。
| 环节 | 具体动作 | 关键参数 |
|---|---|---|
| 发证 | chatgpt.com 调 backend-api/bazaar/obi/sync-token |
JWT,60 秒过期 |
| 换 Cookie | 跨站 POST bzr.openai.com/v1/obi/sync |
一年有效期,SameSite=None |
| 回传 | 广告主页面加载像素脚本、上报事件 | 请求自动带上 __obi |
研究者给出的观测规模:几个月收集到的流量覆盖 936 个广告像素、1,029 个域名;在他自己手机上,同一个 __obi 被 Chewy、Wayfair、ThriftBooks、Eventbrite、HelloFresh、Coursera、SeatGeek 等 12 个商业站点送回 OpenAI,每一次都被服务端以 202 收下。他还解码了 932 枚同步令牌,其中 736 枚对应登录账号,196 枚是匿名主体——没登录也不影响,匿名标识同样能稳定存在 27 天以上。
我把那 82 KB 的追踪脚本下下来读了
不带 ChatGPT 账号,也能核验其中一大半。我从广告主被官方要求加载的那个地址把脚本抓了下来:bzrcdn.openai.com/sdk/oaiq.min.js,82,799 字节,里面写死的版本号是 0.1.41、类型 oaiq-web。研究者文章里引用的行为,来自更早的 0.1.31 时代。
这段代码里有四件事值得单独说。
先说第一件:它不只会收广告主给的数据,还会自己去页面上找。身份来源被分成四类:in(广告主主动传入)、fm(表单字段)、ht(渲染出来的页面文字)、js(标签管理器总线)。代码会去读 window.dataLayer、adobeDataLayer,甚至解析 gtm.js 的 URL 参数,找出改过名字的 GTM 容器。研究者统计的抓取记录里,从页面上扒来的身份比广告主主动交出来的更多——685 条对 255 条。
*姓名仍在自动采集清单里。* 代码中的身份定义表写着:email、phone、firstName、lastName 四项都是 automatic: true,只有 externalId 是 false。地理字段 country、city、region、postal_code 不进哈希,直接明文发送。研究者称采集范围在 8 月 27 日收窄过一轮,但从 0.1.41 的代码看,姓和名依然在自动匹配集合中。
再往下看:它自己划的红线很细。代码里有一张排除名单正则:密码、一次性验证码、CVV、卡号、社保号、生日、病历、诊断、法院案件、罪名都不碰;同时排除的还有礼物收件人、捐赠人、第三方、客服、推荐人、卖家——也就是别人的身份信息。这份名单说明 OpenAI 清楚哪些字段是雷区,边界画得很明确。
最后一件,开关不在广告主手里。每个像素会去 bzrcdn.openai.com/pixel-config/v1/ 加像素 ID 取一份配置,其中有一个布尔字段 automatic_advanced_matching_enabled——自动匹配是否开启,由 OpenAI 的广告后台按账户下发。
我还直接对着端点发了请求。带 Origin: https://chatgpt.com 时,预检返回 204,响应头里 access-control-allow-origin 回显 chatgpt.com、access-control-allow-credentials: true,也就是允许带凭证的跨站调用;换成别的 Origin,直接返回 403 Origin is not allowed.。令牌不对时是 401 Invalid or expired sync token.,内容类型不对则提示必须是 text/plain。一个只对自家前端开放、还要求带凭证的绑定接口,正是把账号身份写进跨站 Cookie 所必需的那一环。
官方文档和 Cookie 政策,写的都是另一套
OpenAI 自己的测量像素文档里,「给用户数据」是广告主主动做的事:可选地在初始化时传入 user 对象,邮箱与手机号按规则规范化后做 SHA-256,用来提高转化匹配率。文档没有说这套 SDK 会自己从表单和页面文字里抓。
再看 Cookie 政策。OpenAI 官网中文版的 Cookie 列表里,「分析型 Cookie」一栏只有一行:来源 OpenAI、名称 __obi、时长一年、用途「分析」、域 chatgpt.com 与 openai.com。营销绩效那一栏里排的是 LinkedIn 等第三方。换句话说,这枚承担跨站身份绑定的 Cookie,官方登记的身份是「分析型」。
研究者 9 月 14 日给 OpenAI 的 press 与 privacy 邮箱发过邮件,问了两个问题:为什么 __obi 被归类为分析 Cookie;只同意分析、拒绝营销的用户,是不是依然会收到它。回复来自客服支持:已收到,会转内部复核。两个问题都没有正面回答。
广告业务比这套机制跑得更快
把时间线摊开,这套东西为什么存在就不难理解了:
| 时间 | 事件 |
|---|---|
| 2026 年 2 月 9 日 | ChatGPT 面向美国 Free 与 Go 用户开始展示广告 |
| 2026 年 4 月 30 日 | 免费用户的营销 Cookie 默认开启,WIRED 实测两个账号均为默认开 |
| 2026 年 5 月 5 日 | 自助广告管理平台向全美企业开放,取消 20 万美元投放门槛 |
| 2026 年 8 月 31 日 | OpenAI 宣布 ChatGPT Ads 年化收入运行率达 10 亿美元,上线不足 200 天 |
按 OpenAI 8 月 31 日官方公告的口径:数万家广告主在使用,业务覆盖 40 多个国家,ChatGPT 周活跃用户超过 10 亿;「Pixel 和转化 API 已成为衡量与优化的重要基础」;并强调广告主无权访问用户的私人对话。据投资人披露的口径,OpenAI 2026 年广告收入目标 25 亿美元,2030 年 1000 亿美元。
广告主确实拿不到你的对话,但「衡量转化」需要知道看过广告的人有没有在别处下单——__obi 就是这条链路里的中间件。它把「在 ChatGPT 里看过一则广告」和「在 Chewy 上买了一次狗粮」接在了同一个人身上。
它证明了什么,没证明什么
边界要说清楚,这决定了你该有多紧张。
已被独立核验的:机制与代码(我下载脚本逐段读的)、绑定端点的访问控制(我实测的)、Cookie 分类(OpenAI 官方政策页原文)。研究者实测、我未能复现的:__obi 真的随广告主页面的请求回传。我没有登录态的 ChatGPT 账号和安卓 Chrome 环境,这一步没跑通。仍是推断的:OpenAI 服务端是否把回传落到你的账号上——观测到的只有 202(已接受),研究者本人在文末写明「这个 join 没有被观测到」。
受影响的人也没那么多:观测环境是安卓版 Chrome;iOS 上所有浏览器跑的都是 WebKit,Safari 的智能防跟踪拦第三方 Cookie,机制不生效;桌面 Chrome 未测;大约每 5 次 ChatGPT 会话才下发一次令牌。
放在广告行业里,这套机制与 Meta Pixel、Google 标签是同构的:登录态、第三方 Cookie、站外转化归因。不一样的地方在于它跑在一个 AI 对话产品上——人们会告诉 ChatGPT 一些不会发朋友圈的事,而这个产品正在越来越多地替人做决定。研究者的原话是:机制本身是标准广告技术,没有先例的是它跑在 AI 聊天产品上。
想关的话,路径在 ChatGPT 的设置 → 数据控制,那里有分析和营销两个独立开关,可以只留一个。另外,广告主自己也看不到 __obi,它在广告主脚本读不到的域上——所以别指望商家能替你把这件事关掉。
我的判断是:这不是漏洞,是选择。OpenAI 在 Cookie 政策里如实登记了这枚 Cookie,也在代码里划了红线,但它没有把「分析型 Cookie 会被用来做跨站身份绑定」这件事讲明白。在广告收入年化冲上 10 亿美元的当口,讲明白的代价,大概比划一条红线要高。
相关阅读:OpenAI推出自助广告管理工具:AI广告投放如何变现? | OpenAI 与微软未删节文件曝光:Copilot 把纽约时报点击率打掉 93%,内部称抓取是「史上最大劳动盗窃」 | 三人用 Claude 黑进 OpenAI 内部代码库:一个图片上传漏洞,72 小时打通到代码提交
关注 AI商业快讯,每天一篇 AI 热点深度解读。