什麼是瀏覽器指紋辨識?網站究竟能讀到什麼?

每次你開啟一個頁面,瀏覽器都會交給網站一長串關於自己的事實。這些資訊沒有一項是祕密,沒有一項需要徵求許可,而且大多數存在的目的是讓頁面能正確顯示。指紋辨識,就是網站不再用這些事實來顯示頁面,而開始用它們來認出你的時候。
網頁不必詢問就能讀到的資訊
在一般分頁中執行的腳本可以讀取許多資訊,其中包括:User-Agent 字串、偏好語言清單、時區、螢幕大小與像素密度、CPU 執行緒數量、裝置記憶體的概略數字、色彩深度、是否支援觸控、WebGL 背後顯示卡渲染器的名稱,以及把一張小圖畫到 Canvas 或渲染一小段音訊緩衝區的結果。它還能觀察某些操作花費的時間、哪些字型會改變一行文字的寬度,以及存在哪些媒體裝置(只有數量,沒有名稱,除非你授予存取權)。
這些資訊單獨來看都很無聊。時區只能把你縮小到幾億人之中。但合在一起,範圍會縮得小得多,因為罕見的是組合。一台 Windows 電腦,配上特定的 NVIDIA 渲染器字串、12 個執行緒、2560×1440 的螢幕、依序為法文與英文的語言設定,以及某個特定的 Canvas 雜湊值,就不再是一群人當中的一個。
什麼讓訊號適合用於識別
有三個特性很重要。訊號必須穩定:同一個瀏覽器明天應該給出同樣的值。它必須多樣:不同的瀏覽器應該給出不同的值。而且它必須廉價:能在數毫秒內讀取,不需要權限提示。Canvas 雜湊值在這三項都得高分,這就是為什麼每個指紋辨識函式庫都會用到它。螢幕大小在前兩項表現良好,第三項則是滿分。User-Agent 過去在多樣性上得分很高,但瀏覽器廠商正是為了這個原因而刻意把它簡化了。
網頁讀不到什麼
這一部分常被誇大。如果你在代理之後,網頁腳本看不到你真正的位址:它只看到代理呈現的內容。它無法讀取其他分頁、你的歷史紀錄、書籤或儲存的密碼。它無法確定你是否處於無痕視窗;宣稱能做到的啟發式方法會定期失效。它無法得知你的姓名。它也無法自行判斷某個位址是代理還是資料中心:這個判定來自網站付費取得的信譽資料庫,而不是你的瀏覽器說了什麼。
顯示「機器人分數」或「代理:是」的網站,是把你的瀏覽器回報的內容與第三方資料結合在一起。這是正當的做法,但重要的是要知道哪一半是量測,哪一半是查詢。
為什麼會有診斷頁面
像 PowerScan 這樣的診斷頁面,讀取的是追蹤者會讀取的同樣訊號,但它是顯示給你看,而不是儲存起來。重點不在於替你打分數,而是讓你檢查兩件事:你原本預期隱藏的訊號是否可見,以及這些訊號彼此是否一致。不一致才是讓帳號被標記的原因:位址在一個國家、瀏覽器時鐘在另一個國家、WebRTC 候選項與你連入時的位址不符。
閱讀報告時,請把每一行都當成對同一個問題的回答:「這個瀏覽器剛才告訴這個頁面什麼?」僅此而已。雜湊值不是裁決,讀到的訊號數量也不能衡量你看起來有多真實。


