WebGL 指紋是甚麼?顯示卡資訊如何成為瀏覽器指紋的一部分
網站讀取顯示卡資訊有兩條路:一條問參數,一條看圖像。第一次打開指紋偵測頁,見到 WebGL Renderer 一欄寫著自家顯示卡型號,很多人的第一反應是「網頁怎麼會知道我裝了甚麼卡」。它讀到的不是硬件序號,是瀏覽器暴露出來的圖形環境特徵。這類特徵一半是介面直接匯報的參數,一半是讓顯示卡繪圖後讀取的結果。單獨一項不足以確定身份,組合起來卻是一塊有區分度的拼圖。
WebGL 是瀏覽器提供的圖形介面。網頁裡的 3D 模型、地圖、視覺化圖表,都靠它調用顯示卡渲染。同一個介面,也會把圖形環境的一部分交出來。MostMate 是一款為每個帳號準備獨立瀏覽器環境的指紋瀏覽器,專門管理各類環境訊號,顯示卡與圖形參數正是其中一大類。這些訊號平日靜靜藏在瀏覽器深處,用戶甚少留意,但對多帳號營運而言,任何一項處理不好,隨時成為環境之間互相踩線的破口。了解 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 有甚麼區別
三個名字經常一同出現,觀察對象卻不相同。整理成表:
| 參數 | 觀察對象 | 採集方式 |
|---|---|---|
| Canvas | 2D 繪製結果 | 畫圖讀差異 |
| WebGL | 圖形能力參數與 3D 渲染圖像 | 問參數+畫圖 |
| WebGPU | 新一代圖形介面的環境訊號 | 問參數+算力試探 |
| AudioContext | 音訊處理輸出 | 演算法處理讀結果 |
WebGPU 與 WebGL 的關係一句話能講清。WebGPU 是瀏覽器正在推廣的新一代圖形介面,能力更強、參數面更闊,WebGPU 指紋那篇寫過它暴露了哪些裝置特徵。WebGL 則是現時覆蓋面最廣的現役介面,幾乎所有瀏覽器都支援。兩者長期共存,偵測頁上經常同時出現,排查時都要看。
怎樣偵測自己的 WebGL 指紋
偵測的關鍵動作是記錄和對照,不是看一眼就關頁面。按三步走:
- 在環境內開啟 IP 偵測頁或 BrowserLeaks 一類工具,找到 WebGL 區塊。記下 Vendor、Renderer、WebGL Version、擴充數量四項。
- 隔一段時間重測同一環境,對照兩次結果。參數由真實顯示卡變成 SwiftShader 這類軟件渲染,或擴充數量明顯變化,都說明環境發生了變動。
- 把 WebGL 結果放進整張環境配置裡核對。WebGL 匯報 Windows 加 NVIDIA,UA 與作業系統也得是 Windows,時區、語言與出口地區彼此對得上。單項正常、組合矛盾的環境照樣扎眼。
有一類提示值得單獨講。偵測頁顯示 SwiftShader、ANGLE (Google) 這類軟件渲染字樣,可能是環境本身無顯示卡。也可能是瀏覽器走了軟件渲染。真實裝置很少出現這類取值,放在長期營運的環境裡,屬於需要處理的訊號。
MostMate 的 WebGL 圖像參數怎樣用
在 MostMate 的「指紋設定」裡,WebGL image 是一個可以單獨調整的參數。設定頁上,它挨著 Canvas 這類圖形參數排在一起。建立或編輯環境時,WebGL image 一欄有 Real 與 Noise 兩檔。Real 一檔保留真實取值;切到 Noise,輸出就走噪音模式。
切換後到右側指紋預覽面板看對應行,取值會變成一個帶六位代號的樣式。這套代號與其他參數互不通用。它標識的是噪音配置,實際暴露的哈希要從環境內開啟偵測頁查看。

檔位怎樣選,取決於環境要扮演誰。長期養號的環境建議 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 自動化 · 帳戶健康 · 團隊營運



