主管想試試在 ChatGPT 上買廣告,請她把 OpenAI 提供的追蹤碼貼到官網。她正準備在週會上報告這件事。
這則素材是 buchodi.com 作者對 OpenAI 廣告系統所做的技術拆解。重點一句話:OpenAI 的廣告收集器(網域 bzr.openai.com)會在你的瀏覽器裡放一顆叫 __obi 的 cookie網站放在你瀏覽器裡的一小段文字紀錄,之後你每次連到那個網站,瀏覽器會自動把它一起送出去。這顆 cookie 裡的識別碼,是在你使用 ChatGPT 時產生的,並且和你的 ChatGPT 帳號綁在一起。
接著是關鍵:任何在 ChatGPT 買廣告的公司,會在自己的網站裝一小段 OpenAI 的程式碼,就像零售商早就會裝 Meta、Google 的追蹤碼一樣。這種程式碼常被叫做 像素(pixel)貼在網頁裡的一小段追蹤程式,網頁一載入它就會向廣告公司回報「有人來了、做了什麼」。它載入時,會把 __obi 連同你正在瀏覽的頁面資料(搜尋的商品、讀的文章、購買行為)一起送給 OpenAI。作者的結論是:OpenAI 能把你在這些網站上做的事,連到你的 ChatGPT 帳號。
整個機制有三個角色要分清楚。第一個是 subJWT 裡代表「帳號主體」的欄位,文中是一串 64 個十六進位字元,代表「你是誰」。第二個是 obi文中的識別碼欄位,一串隨機產生的 22 字元代號,本身不是姓名,只是拿來「對上」帳號的暗號。第三個是裝著 obi 的 cookie(__obi)。一張短命的 JWTJSON Web Token,一張帶數位簽章的電子票,內容寫著「誰、可以做什麼、到幾點失效」,伺服器能驗證它沒被竄改 把 sub 和 obi 綁在一起,cookie 再把 obi 帶到每個廣告主網站。
先看證據的範圍。作者說他在自己的手機上重現了整個流程,用兩種各自獨立的方式 擷取把手機或電腦送出的網路請求錄下來檢查,俗稱抓包 來驗證,還對照了數個月的觀察流量,涵蓋 936 個不同的廣告主像素、1,029 個主機名稱。這是單一研究者的技術拆解,本課只教文中出現的部分,不替它補上文中沒寫的內容。
| 請求 | 有帶 __obi? | 在做什麼/備註 |
|---|---|---|
| GET bzrcdn.openai.com/sdk/oaiq.min.js | 有 | 載入像素腳本本身 |
| POST bzr.openai.com/v1/sdk/eventswithobref | 有 | 回報轉換事件(例如有人完成購買) |
| POST bzr.openai.com/v1/sdk/events(bare body) | 有 | SDK 的「不帶憑證」路徑。文中說這條路徑沒有擋住 cookie,瀏覽器仍然附上了(節錄在此處中斷,原因請看原文) |
| GET bzrcdn.openai.com/pixel-config/… | 沒有(完全沒有 Cookie 標頭) | 文中當作對照組(control) |
這是 ChatGPT 後端簽發的那張 JWT 的內容(payload)。尖括號 « » 裡的值,是文中刻意遮掉的真實資料。逐行看,就能看出「誰、給誰、做什麼、多久失效」是怎麼被寫死在一張票裡的。
{ "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»"}