瀏覽器指紋與環境檢測:時區、語言、字型和 IP 對不上,各自暴露了什麼

部落格 / IP 與隱私

瀏覽器指紋與環境檢測:時區、語言、字型和 IP 對不上,各自暴露了什麼

時區、語言、字型“對不上”,指的是瀏覽器上報的環境資訊和你出口 IP 所在的地區互相矛盾。最常見的情況是:流量從代理出去,IP 定位在國外,但系統時區還是 Asia/Shanghai,語言列表第一位是 zh-CN,字型裡有微軟雅黑和蘋方。這幾項任何網頁都能直接讀到,它們是瀏覽器指紋的一部分,組合起來既能推斷你大致在哪,也能看出網路出口和裝置本身不在一個地方。

下面先列網站能讀到的環境資訊,再解釋代理為什麼會造成不一致,最後給出自查步驟。本文只討論如何減少不必要的暴露,不討論偽裝環境,也不涉及繞過任何平臺的風控或地區限制。

網站在瀏覽器裡能讀到哪些環境資訊

下面這些介面都不需要使用者授權,頁面指令碼一載入就能讀:

類別常見讀取方式能看出什麼
時區Intl.DateTimeFormat().resolvedOptions().timeZone、new Date().getTimezoneOffset()系統設定的 IANA 時區名和 UTC 偏移
語言navigator.language、navigator.languages、請求頭 Accept-Language瀏覽器介面語言和偏好語言的排序
區域格式Intl.NumberFormat、toLocaleDateString()日期、數字、貨幣的預設格式
字型用 Canvas 或 CSS 測量文字寬高,逐個比對字型是否存在裝了哪些字型,間接反映作業系統和語言環境
硬體navigator.hardwareConcurrency、screen.width/height、devicePixelRatio、WebGL 渲染器字串CPU 執行緒數、螢幕規格、顯示卡型號
自動化痕跡navigator.webdriver 等瀏覽器是否被自動化工具控制
網路出口 IP、WebRTC 候選地址、DNS 解析路徑網路在哪裡出去、有沒有走代理

單看每一項,資訊量都不大。放在一起就是常說的瀏覽器指紋:維度一多,組合起來就足以把一臺裝置和大量其他裝置區分開。

前六類資訊來自裝置,最後一類來自網路。代理只改變網路這一層,裝置那一層原樣不動,所以才會出現對不上。

為什麼掛了代理,時區和語言還會和 IP 對不上

代理只換了出口,系統設定沒變

無論是瀏覽器代理、系統代理還是全域性 VPN,改變的都是資料包從哪裡出去。時區是作業系統設定,語言是瀏覽器和系統設定,字型是本機安裝的檔案,這些都不經過網路,代理碰不到它們。

舉個例子(假設場景):一臺在上海使用的 Windows 電腦,出口切到美國西海岸的節點。網站看到的是:

  • IP 地理庫定位:美國加州;
  • 時區:Asia/Shanghai,UTC+8;
  • 語言:zh-CN, zh, en;
  • 字型:存在“微軟雅黑”“宋體”;
  • 瀏覽器往返延遲明顯高於從該 IP 本地訪問應有的水平。

每一項都沒錯,只是它們講了兩個不同的地方。

分流和多出口讓情況更復雜

很多人用的是分流規則:國內站點直連,國外站點走代理。這時同一個瀏覽器在不同網站面前呈現的 IP 不同,但裝置資訊是同一份。如果規則沒有覆蓋 WebRTC 的 UDP 流量或 DNS 查詢,網頁還可能看到第二個、第三個地址。分流的原理和常見坑見 分流(split tunneling),WebRTC 和 DNS 兩類洩漏的區別見 DNS 洩漏與 WebRTC 洩漏。

每種不一致分別洩露了什麼資訊

不一致的項典型表現洩露的資訊嚴重程度
IP 地區 vs 時區IP 在國外,時區 UTC+8裝置實際所在的時區,大致推出所在國家或地區高,最容易被讀到
IP 地區 vs 語言IP 在日本,語言首選 zh-CN使用者的語言習慣;單獨看不說明問題,海外華人也是這樣中
IP 地區 vs 字型出現大量中文字型系統語言版本、是否裝過中文輸入法或辦公軟體中
網頁 IP vs WebRTC IP兩個地址不同未經代理的真實出口,甚至內網地址高
網頁 IP vs DNS 解析伺服器DNS 走本地運營商你所在的運營商和城市高
瀏覽器往返 vs 出口 TCP 往返兩者相差很大流量經過中轉,出口不在裝置附近中
自動化標記webdriver 為真瀏覽器被指令碼控制視場景而定

語言和字型對不上本身很正常。在國外生活的中文使用者、用英文系統的國內開發者,都會出現 IP 和語言不一致的情況。真正說明問題的是時區、WebRTC 和 DNS 這幾項,因為它們直接指向裝置或網路的實際位置。

怎樣用 cdnping /ip 自查瀏覽器環境

cdnping 的 IP 與環境檢測 把上面這些專案放在同一頁,按下面的順序看即可。

第一步:在常用狀態下測一次

保持你平時上網的狀態(開不開代理都行,以平時為準),開啟 /ip,等待各項檢測跑完。頁面會給出:

  • 出口 IP 情報:11 個地理庫投票定位並給出置信度,判斷原生 IP 還是廣播 IP、機房還是家寬;
  • 大陸分流檢測:讀取網易、騰訊、抖音等國內 CDN 回傳的客戶端 IP,判斷你處於“大陸分流 / 全域性代理 / 國內直連”中的哪一種;
  • DNS 洩漏、WebRTC 洩漏:列出網頁之外還能看到的地址;
  • 延遲特徵:瀏覽器往返和 Cloudflare 測得的出口 TCP 往返對比;
  • 時區語言字型、硬體指紋、自動化痕跡:即上一節表格裡的裝置側資訊。

這些指紋在本地計算,不上傳。

第二步:隱藏 IP 後生成結果圖

檢測完成後可以生成一張帶水印的結果圖,方便留檔或發給同事一起排查。生成前開啟“隱藏 IP”,這樣圖片發到群裡或工單裡,不會順帶公開你的出口地址。改動任何設定之前先存一張,作為基線。

第三步:逐項對照

拿結果圖和下面的檢查表逐行對照:

[ ] 地理庫定位的國家/地區,和時區推斷的地區是否一致
[ ] 語言列表首位是否是你預期的語言
[ ] WebRTC 一欄是否只出現網頁出口 IP(或為空)
[ ] DNS 解析伺服器是否和出口 IP 在同一網路或同一地區
[ ] 大陸分流檢測結果是否符合你的設定意圖
[ ] 瀏覽器往返和出口 TCP 往返是否接近
[ ] 自動化痕跡是否為“未檢測到”

有不一致不一定要處理。先問自己一個問題:這項資訊被網站讀到,對你是否有實際影響。

第四步:改動後再測一次

每改一項設定,重新開啟 /ip,生成第二張結果圖,和基線對比。一次只改一項,否則說不清是哪個改動起了作用。

怎樣減少不必要的暴露

目標是讓網站少拿到它本來不需要的資訊,而不是把裝置偽裝成另一個地方。按優先順序排:

  1. 先處理網路層洩漏。 WebRTC 和 DNS 洩漏暴露的是真實網路位置,優先順序最高。按 DNS 洩漏與 WebRTC 洩漏 的說明處理,分流使用者順便檢查規則是否覆蓋了 UDP 和 DNS。
  2. 使用瀏覽器自帶的指紋保護。部分瀏覽器的隱私模式或嚴格模式會對 Canvas、字型列舉、硬體資訊做限制或統一化處理,例如 Tor Browser 的預設設定、Brave 的指紋保護、Firefox 增強型跟蹤保護的嚴格模式。開啟後網站拿到的往往是一組“很多人都一樣”的值,可識別性下降。具體效果因版本而異,開啟前後用 /ip 各測一次就知道。
  3. 少裝用不到的字型。 字型列表是區分度較高的一項,開發者機器上常有大量設計、程式設計字型。清理不需要的字型能降低可識別性,也不影響日常使用。
  4. 分開瀏覽器配置。 工作、個人、除錯分別用不同的瀏覽器配置檔案,減少擴充套件和設定在不同場景之間串聯。
  5. 不要指望改一項就解決問題。 指紋是組合特徵,改動一項往往會產生新的不一致,反而更顯眼。這也是本文不建議手動修改時區或語言去“對齊”IP 的原因。

訪問 AI 服務或其他平臺時,地區限制以服務方條款為準。環境檢測用來了解自己暴露了什麼,不是用來繞過平臺規則,請遵守服務條款和當地法規。

網站拿到這些資訊會用來做什麼

如果你是網站開發者,也可以換個角度看這份清單。時區和語言常被用於本地化:按時區顯示時間、按 Accept-Language 選擇頁面語言,這是合理的用途。指紋類資訊則多用於反欺詐和風控。自己的產品要讀取這些資訊時,建議只取業務真正需要的欄位,並在隱私政策裡說明。cdnping 的 /ip 頁面把指紋放在本地計算、不上傳,也是出於同樣的考慮。

如果你在國內呼叫海外 AI API,網路環境排查不只有隱私這一面,連線質量同樣重要。可以在 首頁線上測速 測一下到 15 個 AI 模型 API 的首次連線和往返時間,或者在 API 狀態 看各家入口的實時探測結果。AGI Plan 是 cdnping 的商業合作方。如果你想用一個介面地址接入多家模型,AGI Plan(agiplan.dev)是一個相容 OpenAI 和 Anthropic 介面格式的聚合閘道器,按月訂閱、人民幣結算,站方說明自己不是官方授權渠道,套餐見 agiplan.dev/pricing。

下一步可以做什麼

  • 開啟 /ip,開啟“隱藏 IP”,生成一張當前環境的結果圖存檔;
  • 對照上面的檢查表,把 WebRTC 和 DNS 兩項先處理掉;
  • 想了解出口 IP 的型別差異,讀 原生 IP 與廣播 IP;
  • 檢測方法和資料來源說明見 資料方法。

相關文章

繼續閱讀