ChatGPT通过广告收集器获取你在其他网站上的活动
摘要
ChatGPT使用广告收集器追踪用户在其他网站的浏览活动,并通过Cookies和广告商代码将行为与ChatGPT账户关联起来。
<p><a href="https://lobste.rs/s/jbnmj9/chatgpt_now_knows_what_you_do_on_other">评论</a></p>
查看缓存全文
缓存时间: 2026/09/20 18:15
# ChatGPT现可通过广告收集器知悉你在其他网站上的行为
来源:https://www.buchodi.com/chatgpt-now-knows-what-you-do-on-other-websites-via-ad-collector/
OpenAI位于`bzr\.openai\.com`的广告收集器会设置一个名为`\_\_obi`的Cookie,其作用域限定为`\.openai\.com`。当你在ChatGPT时,该值与你的ChatGPT账户绑定。之后,当你在普通网站上浏览时,`\_\_obi`会被发送至OpenAI。
任何在ChatGPT上购买广告的公司都会在其自身网站上安装一小段OpenAI代码(https://developers.openai.com/ads/measurement-pixel?ref=buchodi.com),其方式与零售商已经安装Meta和Google的追踪代码类似。加载该代码时,会将`\_\_obi`连同你正在浏览的页面数据一并发送给OpenAI。这些数据包括你正在搜索的商品、正在阅读的文章以及购买行为。
核心在于,OpenAI能够将你在这些网站上的活动与其ChatGPT账户关联起来。
我通过自己的手机复现了整个机制,使用了两种独立的捕获方法进行验证,并与覆盖1029个主机名、936个不同广告商像素的数月观测流量进行了交叉核对。
## 工作原理
**第一步: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": "«已编辑:64位十六进制账户标识»",
"subject_type": "account_user",
"obi": "«已编辑:22字符标识符»",
"exp": "«iat + 60s»"
}
```
其中`sub`是账户标识。`obi`是标识符。该令牌将两者绑定,其作用域限定于收集器,并在60秒后过期。`bzr`是`bazaar`的缩写,OpenAI广告平台的内部名称;`wadi`是签发服务。
**第二步:该标识符成为OpenAI域名下的Cookie。**
客户端向`bzr\.openai\.com/v1/obi/sync`跨站点POST发送`\{"token": "«JWT»"\}`。响应为:
```
Set-Cookie: __obi=«已编辑»; Domain=.openai.com; HttpOnly; Max-Age=31536000; Path=/; SameSite=none; Secure
```
配置了`SameSite=none`和`Secure`的Cookie才能在跨站点请求中被发送。`Max\-Age`为一年。JWT中的`obi`值与Cookie中的值完全相同。
**第三步:广告商网站将其回传。**
有三类请求从广告商的页面发送到OpenAI的主机。在一个存储了`\_\_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的``请求上。仅通过加载该标签,标识符就被泄露了。
## 随附传输的数据
同一SDK也会从广告商的页面收集身份信息。负载区分了四种来源,由OpenAI自行标记:`in`代表广告商有意传递的值,而`fm`、`ht`、`js`代表SDK从表单字段、渲染后的页面文本和标签管理器总线中抓取的值。
在观测的流量中,抓取的身份信息(685次事件)多于广告商提供的身份信息(255次事件)。标签管理器总线是电子邮件的最大来源。SDK替换了`window\.dataLayer\.push`并使用其自定义函数,同时读取`adobeDataLayer`,并通过解析`gtm\.js`脚本标签的`l=`参数来定位重命名的GTM层。当前版本会从中提取电子邮件和电话号码。版本0\.1\.31在8月27日收窄范围前,还会提取姓名和地理位置。
电子邮件、电话号码、名和姓在传输前会进行SHA\-256哈希处理。国家、地区、城市和邮政编码则以明文发送。邮政编码是被抓取最多的表单字段,在28个网站上出现了100次事件。
URL在发送前会缩减为源地址加路径;观测到的23,929个URL中,没有一个携带查询字符串。路径信息得以保留,而到达收集器的路径信息包括一种医疗状况、一个债务解决方案流程和一个诉讼立案表单。
在已知设置的881个像素中,638个启用了自动匹配,包括所有观测到的信用卡和贷款广告商。该功能由OpenAI的Ads Manager控制。一个拒绝名单排除了密码、一次性代码、信用卡号、社会安全号码、出生日期、病史、诊断结果和法院字段。
## 该Cookie专为跨站点设计
在同一个广告商页面的请求上,浏览器阻止了所有其他OpenAI Cookie:
| Cookie | 结果 | 原因 |
| :--- | :--- | :--- |
| `oai\-did`, `oaicom\-stable\-id` | 被阻止 | `SameSite=Lax` |
| `oai\-client\-auth\-info`, 会话Cookie | 被阻止 | 域不匹配 |
| `\_\_obi` | 已发送 | - |
`\_\_obi`是唯一配置了`SameSite=None`的OpenAI标识符。
## 观测到的覆盖范围
在我的设备上,一个`\_\_obi`值被从12个商业网站发送至OpenAI,涉及13个不同的像素ID,包括Chewy、Wayfair、ThriftBooks、Eventbrite、HelloFresh、Coursera和SeatGeek。所有请求都返回了`202`状态码,表示已被接受。
在更广泛的流量中,30个不同的`\_\_obi`值中有12个出现在多个广告商下,其中一个出现在十个广告商下。
## 登出状态下依然有效
在932个解码的同步令牌中,736个携带`subject\_type: account\_user`,196个携带`anonymous`。匿名主体的稳定性与账户主体一样:每个设备一个,至少持续27天。
## OpenAI的Cookie政策如是说
OpenAI的Cookie政策 (https://openai.com/policies/cookie-policy/?ref=buchodi.com) 将`\_\_obi`列为分析类Cookie,有效期一年,适用于`chatgpt\.com`和`openai\.com`。这是该部分中唯一的条目。
该政策将分析类Cookie描述为帮助OpenAI理解其服务的性能和使用情况。OpenAI将分析和营销作为两个独立的同意选项运行:`oai\_consent\_analytics`和`oai\_consent\_marketing`。我解码的每个同步令牌都携带了`consent\_decision: analytics\_allowed`。允许分析但拒绝营销的用户也会收到此Cookie。
## OpenAI的回应
我在9月14日向[press@openai\.com](mailto:[email protected])和[privacy@openai\.com](mailto:[email protected])发送了该机制的描述和两个问题:为什么`\_\_obi`被归类为分析Cookie,以及一个授予分析同意但拒绝营销同意的用户是否仍会收到它。
回复来自OpenAI Support。它确认了收到询问,表示这些观测结果将在内部共享以供审查,但并未回答任一问题。上述关于脚本加载的观察是在发送询问之后进行的。如果OpenAI做出回应,我将更新本文。
## 限制
* **浏览器。** 在安卓版Chrome上观测到。Safari的智能防跟踪 (https://webkit.org/tracking-prevention/?ref=buchodi.com) 会阻止所有第三方Cookie,而iOS上的Chrome基于WebKit运行,因此该机制在任何iOS浏览器上都不起作用。桌面版Chrome未经测试。
* **触发条件。** 大约每五个ChatGPT会话中有一个会产生同步令牌。ChatGPT的移动网页客户端在未同步的情况下投放广告。执行以下步骤的用户可能会看到像素触发但没有Cookie附加。
* **关联过程未被观测到。** `202`表示收集器接受了附带Cookie的事件。OpenAI在服务器端将其解析到账户,这源于设计本身;我并未实际观察到这一过程发生。
* **Meta多年前就构建了结构等效物。** 一个已登录的账户、像素触发时的第三方Cookie、解析到个人资料的离站转化。该机制是标准的广告技术。前所未有的是将其运行在AI聊天产品上。人们会对这些产品倾诉他们不会在社交网络上公开的事情,而这些产品也越来越多地代表他们行事。
* **该像素的另一个Cookie不执行此功能。** `\_\_obref`是在广告商自己的域名上设置的。每个网站获得不同的值,且任何网站都无法看到其他网站的值。在观测到的2860个值中,2828个恰好只出现在一个广告商下。
* **广告商无法看到此信息。** `\_\_obi`属于一个其脚本无法读取的域名。他们安装了转化像素,但无法知道其访问者正在被解析到ChatGPT身份。
相似文章
ChatGPT 广告库
一款名为 ChatGPT Ad Library 的工具允许用户查看在 ChatGPT 中显示的所有广告。
ChatGPT广告定向投放效果很差
一项实验显示,与谷歌广告及免费引流相比,ChatGPT上的广告定向投放效果很差且转化率较低,已排除机器人流量是主要原因。
ChatGPT的计算机历史功能追踪您的点击和按键
ChatGPT的macOS桌面应用引入Computer History功能,该功能追踪用户操作如点击和按键,以构建时间线,用于建议自动化和引用过去活动,并带有选择加入的隐私控制且不捕获图像。
ChatGPT can now complete tasks on your computer
OpenAI's new ChatGPT feature allows it to directly control browsers and desktop applications, enabling automated tasks like form filling and data entry.
ChatGPT广告购买新方式
OpenAI扩展ChatGPT广告试点,推出自助式广告管理器测试版、CPC竞价和增强型效果衡量工具,让企业投放广告更加便捷。