← 返回部落格

WebGL 指紋是甚麼?顯示卡資訊如何成為瀏覽器指紋的一部分

網站讀取顯示卡資訊有兩條路:一條問參數,一條看圖像。第一次打開指紋偵測頁,見到 WebGL Renderer 一欄寫著自家顯示卡型號,很多人的第一反應是「網頁怎麼會知道我裝了甚麼卡」。它讀到的不是硬件序號,是瀏覽器暴露出來的圖形環境特徵。這類特徵一半是介面直接匯報的參數,一半是讓顯示卡繪圖後讀取的結果。單獨一項不足以確定身份,組合起來卻是一塊有區分度的拼圖。

WebGL 是瀏覽器提供的圖形介面。網頁裡的 3D 模型、地圖、視覺化圖表,都靠它調用顯示卡渲染。同一個介面,也會把圖形環境的一部分交出來。MostMate 是一款為每個帳號準備獨立瀏覽器環境的指紋瀏覽器,專門管理各類環境訊號,顯示卡與圖形參數正是其中一大類。這些訊號平日靜靜藏在瀏覽器深處,用戶甚少留意,但對多帳號營運而言,任何一項處理不好,隨時成為環境之間互相踩線的破口。了解 WebGL 指紋從哪裡來、怎樣被讀取,是整理環境配置的基本功,也是本文想講清楚的事。

兩類資訊:問出來的參數,畫出來的圖像

WebGL 指紋的資訊來源分兩類,採集方式完全不同。第一類是問出來的。網頁調用介面查詢圖形環境,取得顯示卡廠商、渲染器型號、支援版本這些答案。第二類是畫出來的。網頁讓顯示卡渲染一張固定內容,再讀取繪製結果。不同裝置的輸出存在細微差異。兩類合在一起,構成網站眼中的圖形環境畫像。

WebGL 指紋雙通道採集機制示意

先看以查詢方式取得的部分。常見欄位對應如下:

欄位內容常見取值示例
Vendor顯示卡廠商Google Inc.(NVIDIA)
Renderer渲染器型號ANGLE(NVIDIA, GeForce RTX 3060)
WebGL Version介面版本WebGL 2.0
Extensions支援的擴充列表一組擴充名稱

列表裡有幾個細節值得留意。Vendor 一欄很多瀏覽器統一顯示 Google Inc.,真實廠商藏在括號裡。Renderer 的取值因瀏覽器實作而異,同為 NVIDIA 顯示卡,不同瀏覽器匯報的字串格式可能不同。擴充列表的差異更明顯。支援哪些擴充、次序如何,都能提供附加資訊。

這些參數的讀取入口,是一個名為 WEBGL_debug_renderer_info 的擴充。它暴露兩個常量:未遮蔽的廠商字串和渲染器字串。MDN 文件寫明,這個擴充本是給除錯用的,且隨瀏覽器私隱設定變化。Firefox 開啟 resistFingerprinting 私隱開關後會直接停用它。換句話說,同一張顯示卡在不同瀏覽器、不同私隱配置下,匯報的內容可能不一樣。偵測時要留意這個變數。

顯示卡為何會成為環境特徵

參數的區分度來自組合,而非單一欄位。顯示卡市場高度集中。NVIDIA、AMD、Apple、Intel 加起來覆蓋了絕大多數裝置,單獨一個 Renderer 欄位並不能鎖定某個人。但它與其他訊號拼在一起時,區分度就可能提高。例如,Windows 裝置使用 Chrome 瀏覽器時,WebGL 暴露的圖形環境通常與相應的系統和瀏覽器配置有關;如果瀏覽器資訊顯示 Windows,圖形環境卻呈現與 macOS 裝置相符的特徵,就值得進一步檢查。時區等其他參數如果也與預期環境不符,整體配置就可能出現互相矛盾的訊號。

圖形參數矛盾組合與一致組合對照示意

重點不是把每個參數都隨機修改,而是檢查不同環境訊號之間是否協調。隨意改動單一參數,不一定能讓整體環境更合理,而隨機修改指紋本身也可能帶來新問題,指紋隨機化為什麼不安全一文有展開。

再看畫出來的部分。讓顯示卡渲染固定圖像並讀取輸出,思路與 Canvas 指紋同源,Canvas 指紋那篇寫過 2D 繪製差異的機制。WebGL 走的是 3D 管線,渲染過程經過顯示卡驅動程式與底層圖形庫。不同 GPU、不同驅動程式版本、不同瀏覽器實作,都可能令輸出相差那麼幾個像素。這類差異用戶肉眼看不見。腳本卻能精確讀取。

兩句要交代清楚。其一,圖像差異的區分度沒有傳說中那麼誇張。同型號顯示卡、同版本驅動程式的裝置之間,可能測不出差別。其二,它與參數類資訊是兩種採集方式,偵測結果要分開解讀。

WebGL、Canvas、WebGPU 有甚麼區別

三個名字經常一同出現,觀察對象卻不相同。整理成表:

參數觀察對象採集方式
Canvas2D 繪製結果畫圖讀差異
WebGL圖形能力參數與 3D 渲染圖像問參數+畫圖
WebGPU新一代圖形介面的環境訊號問參數+算力試探
AudioContext音訊處理輸出演算法處理讀結果

WebGPU 與 WebGL 的關係一句話能講清。WebGPU 是瀏覽器正在推廣的新一代圖形介面,能力更強、參數面更闊,WebGPU 指紋那篇寫過它暴露了哪些裝置特徵。WebGL 則是現時覆蓋面最廣的現役介面,幾乎所有瀏覽器都支援。兩者長期共存,偵測頁上經常同時出現,排查時都要看。

怎樣偵測自己的 WebGL 指紋

偵測的關鍵動作是記錄和對照,不是看一眼就關頁面。按三步走:

  1. 在環境內開啟 IP 偵測頁或 BrowserLeaks 一類工具,找到 WebGL 區塊。記下 Vendor、Renderer、WebGL Version、擴充數量四項。
  2. 隔一段時間重測同一環境,對照兩次結果。參數由真實顯示卡變成 SwiftShader 這類軟件渲染,或擴充數量明顯變化,都說明環境發生了變動。
  3. 把 WebGL 結果放進整張環境配置裡核對。WebGL 匯報 Windows 加 NVIDIA,UA 與作業系統也得是 Windows,時區、語言與出口地區彼此對得上。單項正常、組合矛盾的環境照樣扎眼。

有一類提示值得單獨講。偵測頁顯示 SwiftShader、ANGLE (Google) 這類軟件渲染字樣,可能是環境本身無顯示卡。也可能是瀏覽器走了軟件渲染。真實裝置很少出現這類取值,放在長期營運的環境裡,屬於需要處理的訊號。

MostMate 的 WebGL 圖像參數怎樣用

在 MostMate 的「指紋設定」裡,WebGL image 是一個可以單獨調整的參數。設定頁上,它挨著 Canvas 這類圖形參數排在一起。建立或編輯環境時,WebGL image 一欄有 Real 與 Noise 兩檔。Real 一檔保留真實取值;切到 Noise,輸出就走噪音模式。

切換後到右側指紋預覽面板看對應行,取值會變成一個帶六位代號的樣式。這套代號與其他參數互不通用。它標識的是噪音配置,實際暴露的哈希要從環境內開啟偵測頁查看。

MostMate 指紋設定中的 WebGL image 參數示意

檔位怎樣選,取決於環境要扮演誰。長期養號的環境建議 Real。真實顯示卡的參數與驅動程式行為最難造假,環境穩定就不需要動它。需要為同類業務準備多個環境時,Noise 提供差異化的圖像輸出。幾個環境不會在圖形維度匯報同一張臉。選 Noise 也不是把參數推倒重來,指紋預覽面板裡每一項的取值都擺在明面上,配置成甚麼樣一眼可查。

邊界同樣要說清。參數管理降低的是環境之間的混用與矛盾風險。WebGL 之外,屏幕解像度、字體這類訊號各自獨立,逐項對齊的方法在防關聯一致性那篇有檢查表。環境配得再齊整,判斷權始終在平台手上,這篇不給任何「配了就查不出」的承諾。

關於 WebGL 指紋的常見問題

網站能看到我的真實顯示卡型號嗎?

能看到 Renderer 欄位裡的型號字串,前提是瀏覽器沒有限制 WEBGL_debug_renderer_info 擴充。但這是瀏覽器暴露的圖形描述資訊,不是讀取硬件身份。Firefox 等瀏覽器開啟私隱保護後,這類資訊會被隱藏或通用化。

關閉 WebGL 能不能避免被指紋識別?

不建議。現代網頁大量依賴 WebGL 渲染,停用後頁面功能受影響。而且主流瀏覽器都支援 WebGL,一個不支援的瀏覽器本身就是異常訊號,反而更容易被單獨歸類。

WebGL 指紋和 Canvas 指紋是同一回事嗎?

不是。兩者都利用渲染差異,但 Canvas 走 2D 繪製,WebGL 走 3D 管線且多了能力參數這一層。偵測頁上它們是兩個獨立區塊,取值互不代表。

指紋瀏覽器能把 WebGL 改成任意顯示卡嗎?

取決於產品實作。MostMate 的做法是提供真實與噪音兩種檔位,噪音模式給出差異化的圖像輸出。重點始終是讓整套環境的參數彼此自洽,而不是把某個欄位單獨改成某個值。

結語

WebGL 指紋的本質,是瀏覽器把圖形環境的參數與渲染行為交給網站:參數回答「你是甚麼卡」,圖像回答「你畫出來是甚麼樣」。多帳號營運要處理的從來不是隱藏顯示卡這件事。要點在於讓每個環境的圖形參數,與 UA、時區、出口地區講同一個故事。

MostMate 把 WebGL 圖像這類參數收進環境配置統一管理。檢查與對齊,都能省事。環境建起來只是開始,日常的核查習慣才是長期變數。更多圖形參數的處理方式,官網首頁有完整入口;要為多帳號搭一套邊界清楚的環境,可以下載 MostMate 從第一個環境開始。

MOSTMATE

安全管理多帳戶,輕鬆簡單

從首個帳戶開始,利用 MostMate 建立更安全、更智能、更高效的多帳戶營運方式。

  • 設定檔各自獨立,身分保持一致。
  • AI 自動化 · 帳戶健康 · 團隊營運
下載 MostMate