瀏覽器指紋是什麼:網站不靠 Cookie 認出你的幾類特徵與自查方法

部落格 / IP 與隱私

瀏覽器指紋是什麼:網站不靠 Cookie 認出你的幾類特徵與自查方法

瀏覽器指紋,是網頁在你不知情的情況下讀取的一組裝置和軟體特徵:系統和瀏覽器版本、螢幕尺寸、時區語言、已裝字型、顯示卡渲染結果等。單看每一項都很普通,組合起來卻可能足夠獨特,讓網站在你清掉 Cookie、換了無痕視窗之後,仍然大致認得出是同一臺裝置。想知道自己暴露了什麼,可以開啟 cdnping 的 IP 與環境檢測,它在本地算出各項指紋,再對照本文逐項看。

Cookie 是網站寫進你瀏覽器的一段標識,下次訪問時瀏覽器把它帶回去。它的特點是:存在你本地,你能看到、能刪、能攔。

指紋不寫任何東西,而是網站每次現場讀取你瀏覽器的特徵,再算出一個雜湊值。兩者的差異可以這樣對照:

對比項Cookie瀏覽器指紋
存在哪裡你的瀏覽器裡不儲存,每次重新計算
使用者能否刪除能,清除站點資料即可沒有可刪的東西
無痕模式是否有效有效,視窗關閉即清空基本無效,硬體和系統沒變
穩定性刪除前一直不變瀏覽器升級、換顯示器、裝字型後會變化
常見用途登入態、購物車、偏好設定風控、反欺詐、跨站追蹤

所以指紋不一定都是“追蹤”。銀行和登入系統也用它判斷“這次登入是不是在一臺陌生裝置上”。問題在於,同一套技術也可以在你不同意的情況下,把你在不同網站上的訪問串起來。

網站能讀到哪些指紋?按五類來看

區分度指的是這一項能把人群切得多細。區分度低的項單獨沒意義,但多項疊加後,可識別性會明顯上升。

第一類:UA 與作業系統

  • 讀取方式:HTTP 請求頭裡的 User-Agent、Accept-Language;JavaScript 的 navigator.userAgent、navigator.platform;Chromium 系瀏覽器還有 navigator.userAgentData(Client Hints)。
  • 區分度:中等。主流瀏覽器加主流系統的組合人數很多,但小眾版本、少見的系統組合會立刻顯得突出。
  • 能否改變:UA 字串可以改,但網站還能透過別的特徵推斷系統和核心。cdnping /ip 的“核心版本反推”就是用 23 項瀏覽器特徵反推實際核心版本,再和 UA 聲稱的版本對比。改了 UA 卻沒改其他特徵,反而形成一處不一致。

第二類:螢幕與硬體

  • 讀取方式:screen.width/height、devicePixelRatio、色深;navigator.hardwareConcurrency(CPU 邏輯核心數);部分瀏覽器提供 navigator.deviceMemory(記憶體檔位);觸控點數 maxTouchPoints。
  • 區分度:中到高。解析度加縮放比例加核心數,能把常見筆記本、外接顯示器、高配桌上型電腦分得比較開。
  • 能否改變:硬體本身改不了。瀏覽器視窗大小每次都可能不同,所以部分隱私方案會把視窗尺寸取整,減少這一項的資訊量。

第三類:時區、語言與字型

  • 讀取方式:Intl.DateTimeFormat().resolvedOptions().timeZone、new Date().getTimezoneOffset();navigator.language 和 navigator.languages;字型透過測量一段文字在不同字型下的渲染寬度來探測,或用 document.fonts 檢查。
  • 區分度:字型最高。裝過設計軟體、辦公套件、開發工具的人,字型列表往往差別很大。時區和語言在同一地區內區分度低。
  • 能否改變:語言和時區能在系統裡改,字型可以解除安裝。這一類和 IP 的關係最緊:時區、語言和出口 IP 的地區對不上時,網站會注意到這一點。具體會暴露什麼,可以看 瀏覽器指紋與環境檢測:時區、語言、字型和 IP 對不上,各自暴露了什麼。

第四類:Canvas、WebGL 與音訊渲染

這是區分度最高、普通使用者最難感知的一類。

  • Canvas:網頁在一塊看不見的畫布上畫文字和圖形,再用 toDataURL() 讀出畫素。不同顯示卡、驅動、系統字型渲染和抗鋸齒設定,會讓結果有細微差異。
  • WebGL:透過 WEBGL_debug_renderer_info 擴充套件可以讀到顯示卡廠商和型號字串;再渲染一個 3D 場景取雜湊,差異來自 GPU 與驅動。
  • 音訊:用 OfflineAudioContext 生成一段訊號並處理,輸出的浮點數會因音訊棧實現不同而略有差別。
  • 區分度:高。
  • 能否改變:使用者幾乎改不了,除非換硬體或驅動。可行的做法是由瀏覽器統一返回結果,或者每次加入隨機噪聲,後面會講。

第五類:自動化痕跡

  • 讀取方式:navigator.webdriver 是否為 true;是否存在無頭瀏覽器特有的屬性或缺失某些外掛;視窗尺寸與螢幕尺寸關係是否異常;滑鼠、鍵盤事件的節奏。
  • 區分度:這一項不是用來區分個人,而是區分“人還是指令碼”。
  • 能否改變:普通使用者一般不會命中。如果你用 Selenium、Playwright 做過測試,留在本機的配置有時會讓日常瀏覽器也帶上痕跡,可以用 /ip 確認一下。

用 cdnping /ip 自查:一份可以照做的步驟

/ip 的指紋檢測在瀏覽器本地計算,不上傳;生成結果圖時可以選擇隱藏 IP。建議按下面的順序看:

  1. 用平時最常用的瀏覽器開啟 /ip,不要開無痕,先看日常狀態。等各項檢測跑完。
  2. 看出口 IP 的地區和型別,記下 IP 所在國家和時區。機房 IP 和家寬 IP 的差別見 機房 IP 和家寬 IP 有什麼區別。
  3. 對照“時區語言字型”:瀏覽器時區、系統語言和 IP 所在地是否一致。不一致不一定是問題,例如出差、使用公司網路,但你應該知道它存在。
  4. 看“硬體指紋”:核心數、螢幕、顯示卡字串是否和你的真實裝置相符。顯示卡字串顯示為通用名稱,通常說明瀏覽器做了統一處理。
  5. 看“核心版本反推”:反推出的核心版本是否與 UA 一致。不一致多半來自 UA 修改擴充套件。
  6. 看“自動化痕跡”:日常瀏覽器應當全部為否。
  7. 順手看 WebRTC 和 DNS 洩漏:它們不算指紋,但同樣會暴露真實網路資訊。原理見 DNS 洩漏與 WebRTC 洩漏,各瀏覽器的關法見 WebRTC 洩漏怎麼關。
  8. 換一個瀏覽器或開啟無痕視窗再測一次,對比哪些項變了、哪些沒變。沒變的項,就是清 Cookie 也帶不走的部分。

/ip 頁面上每一項檢測結果怎麼讀,可以對照 瀏覽器環境檢測怎麼看:13 項檢測逐項解讀。各項的計算口徑公開在 資料方法。

自查結果怎麼判斷?

你看到的情況可能的原因要不要處理
時區與 IP 地區不一致用了代理或公司網路,系統時區未變瞭解即可;涉及具體服務時遵守其條款
UA 版本與反推核心不一致裝了改 UA 的擴充套件不需要時建議解除安裝,它反而增加特殊性
字型數量明顯偏多裝過設計、排版、開發軟體隱私敏感時可用單獨的瀏覽器配置
navigator.webdriver 為真測試框架殘留、啟動引數檢查啟動方式和擴充套件
顯示卡顯示為通用名稱瀏覽器開啟了指紋保護正常

想降低可識別性,該怎麼做?

這裡的目標是出於隱私,減少被跨站追蹤的可能,不是偽裝成別人,也不是繞過網站的風控或地區限制。各平臺的風控規則和服務條款仍然要遵守。

原則:變得“普通”比變得“隨機”更有效

指紋識別靠的是“少見”。一臺裝了十幾個小眾擴充套件、改了 UA、自定義了一堆字型的瀏覽器,比一臺預設設定的瀏覽器更好認。所以第一步通常是做減法:

  • 解除安裝不用的擴充套件,尤其是會修改頁面或請求頭的擴充套件;
  • 保持瀏覽器更新到當前穩定版,舊版本本身就是少數;
  • 隱私要求高的瀏覽,單獨用一個乾淨的瀏覽器配置,不裝多餘字型和擴充套件。

瀏覽器自帶的指紋保護

  • Firefox:在 about:config 中把 privacy.resistFingerprinting 設為 true。開啟後時區會統一報告為 UTC,視窗尺寸會被取整,Canvas 讀取可能彈出授權提示,部分 API 返回統一值。日常使用也可以先只開“增強型跟蹤保護”的嚴格模式。
  • Tor Browser:預設讓所有使用者呈現儘量相同的指紋,適合高隱私需求,代價是速度和相容性。
  • 其他瀏覽器:部分瀏覽器提供 Canvas、WebGL 結果隨機化或在隱私視窗中限制指紋 API,具體以各自官方文件為準。

這些做法的代價

開啟指紋保護後,你可能遇到:網頁顯示的時間按 UTC 計算、地圖或日曆時區錯亂、Canvas 類線上工具和部分驗證碼異常、登入時被要求更多驗證。遇到某個網站無法正常使用,可以針對該站單獨放行,而不是全域性關閉。

指紋和 IP,哪個更容易認出你?

兩者是互補的。IP 告訴網站你從哪個網路來,指紋告訴網站你用的是什麼裝置。很多網站會同時看兩者,再加上延遲特徵判斷你是否經過中轉,原理見 網站如何用延遲判斷你在用代理。只處理其中一個,另一個依然可見。

如果你想把出口 IP、DNS、WebRTC、指紋和 API 連通性一次查完,可以按 開發者網路自檢清單(2026 版) 走一遍。

相關文章

繼續閱讀