指紋檢測頁會列出許多網站本來就能讀取的欄位。這六項檢查可用來找出瀏覽器、系統、地區、網路與渲染資訊之間的矛盾,因為多個訊號互相衝突,通常比單一不常見的數值更容易被辨識。
打開任何一個瀏覽器指紋檢測頁面,都會看到一長串欄位:UA、螢幕、時區、字型、Canvas 渲染結果與硬體參數。多數人第一眼會先看「唯一性」,但其實這一項最不重要。真正更值得注意的,是這些欄位彼此之間是否能互相對得上。

網站本來就能讀取哪些資訊
指紋不是像 Cookie 一樣被儲存下來。Cookie 可以刪除、停用,也能用無痕模式避開;指紋則來自瀏覽器與裝置本身的設定。UA 會帶有瀏覽器類型、版本,以及作業系統與版本。除此之外,還包括已安裝的外掛、螢幕解析度與色彩深度、字型清單、時區與偏好語言、CPU 類型、GPU 型號與記憶體大小、IP 位址、網路供應商與連線類型,以及 Canvas、WebGL 這類 HTML5 介面回傳的渲染結果。這些欄位組合起來就形成一個識別特徵,換 IP、清除 Cookie 或開啟無痕模式後,通常也不會有太大變化。平台用來判斷帳號是否可能互相關聯,採用的也是相同原理。
先把三個項目和系統對帳
User Agent 最值得先看,因為它就是瀏覽器在描述自己。先從檢測頁抄下 UA,再到瀏覽器設定中核對版本號,並到系統設定中確認作業系統版本。如果 UA 宣告的系統或核心版本和實際機器不一致,或明顯落後於目前常見版本,這就是最容易被看出的不一致之一。
時區要和網路出口所在地區相符。檢測頁通常會直接列出目前時區,用簡單的時區查詢腳本也能得到同樣的值;另外再找任一個 IP 查詢頁面,確認出口 IP 所屬地區。如果兩者指向不同區域,就應處理這個差異。
語言和地區單獨來看都是弱訊號,但組合起來很有用。查看 navigator.language 與 navigator.languages 回傳的清單,再對照出口地區常用的語言。如果時區在美國、語言是中文、出口卻在歐洲,這種組合會比任一單項更顯眼。
螢幕、網路出口與渲染特徵
螢幕與硬體參數主要看兩件事:這組數值是否常見,以及它和 UA 宣告的裝置類型是否吻合。解析度、像素比例、可用區域、CPU 核心數與記憶體可以放在一起看。手機尺寸的解析度配上桌面版 UA,就是很典型的自相矛盾。
WebRTC 要單獨檢查,因為它可能洩露真實網路資訊。檢測頁通常會把它獨立列成一項。看看是否回傳本機內網位址,例如以 192.168 或 10 開頭的位址,或甚至直接回傳真實的公網出口位址。如果已經使用代理,真實位址卻仍然出現,就表示那部分流量沒有經過代理。這一項的優先級最高。
Canvas 和 WebGL 要看回傳結果是否穩定,以及是否和宣告的 GPU 型號一致。有個細節要注意:同一台機器上同時開著多個環境,如果它們回傳完全相同的渲染值,會比回傳帶有一些差異或雜訊的值更容易被串聯起來。
彼此矛盾,比不夠真實更顯眼
平台並不要求每一台裝置都完全獨一無二,它真正要判斷的是整套資訊看起來是否像由正常機器送出。單一數值不夠「真實」,例如某個解析度比較少見,通常只是弱訊號;但幾個欄位彼此衝突時,就更容易被辨識。UA 說是 Windows,字型清單卻像 macOS;時區在美國、語言是中文、出口在歐洲;解析度像手機,UA 卻是桌面瀏覽器。只要出現其中一種組合,其他參數再怎麼細調都可能失去意義。因此自查時應先找明顯矛盾,再談各項參數是否夠細緻。
如果只想改三個地方
第一是 WebRTC 洩露,因為它暴露的是真實網路資訊。第二是讓時區與語言和出口地區保持一致,因為這類差異很容易累積成異常判定。第三是處理 Canvas 與 WebGL,避免同一台機器直接暴露穩定且唯一的渲染值。
也要注意實際限制:停用或限制 JavaScript 可以擋住一部分蒐集,但會明顯影響網站可用性;隱私導向瀏覽器本身提供一些防護,日常瀏覽通常夠用,但如果需要長期維持多個彼此無關的身分,就可能顯得不夠靈活。
如何維持多個環境
重點不是每次都換一套完全隨機的指紋,而是讓每個環境內部保持穩定,同時不同環境彼此有差異。可以用 PurpleMark 為每個帳號建立獨立的瀏覽器環境,將 Canvas 這類參數分開處理,再用檢測頁逐一確認每個環境的內部一致性。能通過這輪自查的環境,才值得長期維持。
說到底,指紋檢測只有兩個用途:看清楚自己暴露了什麼,以及確認這整套資訊在內部是否說得通。唯一性反而是最不需要焦慮的一項。


