PowerScan
TC

User-Agent 字串與 Client Hints:它們揭露什麼,又凍結了什麼

瀏覽器指紋 · 閱讀約 6 分鐘 · 作者:PowerScan

圖片:Unsplash

User-Agent 字串是網路上最古老的識別訊號,也是近幾年變動最大的一個。要讀懂它,就得知道裡面還剩下什麼、哪些被刻意凍結,以及被移除的細節跑到哪裡去了。

這個字串說了什麼

目前 Windows 上的 Chromium 字串看起來像 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36。那些歷史遺留的標記(Mozilla/5.0、AppleWebKit、like Gecko、Safari)是為了相容數十年前寫的指令碼而存在,不帶任何資訊。真正有用的部分是平台(Windows NT 10.0,即使在 Windows 11 上也是如此)、架構,以及瀏覽器的主要版本。

過去存在的內容是被刻意移除的。次要版本與修補版本現在是 0.0.0。Windows 版本被固定為 10.0。Android 字串不再包含裝置型號。這就是 Chromium 在 2022 至 2023 年間推出的「User-Agent 縮減」,正是因為這個字串已經成為指紋辨識的管道。

Client Hints:同樣的資料,按需提供

被移除的細節並沒有消失,而是移到了 User-Agent Client Hints。伺服器可以用 Accept-CH 標頭要求特定欄位,瀏覽器之後便會在後續請求中送出像 Sec-CH-UA-Platform-Version 或 Sec-CH-UA-Model 這樣的標頭。低熵的提示(品牌與主要版本、平台、是否為行動裝置)預設就會送出。高熵的提示(完整版本、架構、位元數、型號、平台版本)只會送給提出要求的網站,指令碼也可以透過 navigator.userAgentData.getHighEntropyValues() 要求同一組資料。

設計目標是讓網站必須宣告自己想要什麼,使蒐集行為可見且可稽核。實際上,想做指紋辨識的網站仍然可以要求全部資料;差別在於,提出要求這件事是瀏覽器看得到、可以記錄或拒絕的。

一致性問題

由於同樣的事實現在有兩個來源,它們就能互相比對。一個把 User-Agent 字串改成宣稱是 macOS、卻讓 navigator.userAgentData.platform 仍然回報 Windows 的瀏覽器,製造出一個極易偵測的矛盾。navigator.platform 屬性、頁面可見的作業系統專屬字型,以及 WebGL 轉譯器字串(它指出的顯示卡驅動程式只存在於某一種作業系統)也是如此。只偽造字串,多年來一直是一個注定失敗的策略。

讀取你自己的

診斷工具會顯示原始字串、從中解析出的瀏覽器與版本,以及引擎(Blink、Gecko 或 WebKit)。請注意,iOS 上的每個瀏覽器不論品牌為何,都回報 WebKit,因為這是 Apple 的要求。如果解析出的瀏覽器名稱讓你意外,表示字串被擴充功能或設定檔的設定改過了;這是否有問題,取決於瀏覽器的其他部分是否與這項改動一致。

所有文章 · 開始掃描