你有沒有過這種經歷:清理了快取、關了無痕模式、甚至重裝了瀏覽器,打開某個網站,對方還是知道「是你」。或者更實際的——在同一台電腦上登入兩個店鋪帳號,明明一個用了 Chrome、一個用了 Edge,平台還是把兩個號判定為關聯。
答案很可能藏在 Canvas 指紋裡。
Canvas 指紋是瀏覽器指紋裡最難偽裝、區分度最高的一項——網站讓瀏覽器「畫一幅圖」,再讀取畫出來的像素數據,生成一串專屬標識。 你的 GPU、顯示卡驅動、字體渲染、抗鋸齒演算法裡任何一點不同,都會讓畫出來的圖出現肉眼看不見、但機器能精確檢測的細微差異。
瀏覽器指紋本身是作業系統、解析度、字體、時區等幾十項參數的組合(原理在什麼是瀏覽器指紋這篇科普裡有完整拆解),Canvas 是其中最難造假的一項:UA 可以隨便改,語言時區可以隨便設,但「畫出來的圖長什麼樣」由你的真實硬體和渲染引擎決定,改起來要動底層。
這也是為什麼平台做帳號關聯檢測時,Canvas 幾乎總在「重點參考指標」名單上。
整個過程並不神秘,四步就能說清:
toDataURL() 或 getImageData() 把畫布內容轉換成一串像素數據。我第一次在檢測網站上看到自己的 Canvas hash 時挺驚訝的:一串看不出含義的字元,居然能精確代表我這台電腦的顯示卡和渲染引擎。更關鍵的是,這個過程你完全無感知——沒有彈窗、沒有提示,頁面載入完它就已經拿到了。

不是只有 Canvas 一種指紋,為什麼它被用得最多?和 UA、字體、WebGL 相比,Canvas 有幾個獨特優勢:
對比之下,WebGL 指紋同樣來自 GPU 渲染(側重 3D 能力),但部分老裝置不支援、覆蓋不如 Canvas 廣;字體列表、解析度這類特徵則區分度不夠。所以平台風控通常把 Canvas 當作「主證據」,把 UA、時區、IP 當作「輔助線索」交叉驗證。
想親眼看看自己的 Canvas hash 長什麼樣,打開任意線上檢測工具(如 Browserscan)即可,頁面會自動執行上面的四步流程,把生成的 Canvas hash 和繪製圖形展示出來。
看 hash 不是目的,驗證「環境隔離」才是:在 MasBrowser 裡建兩個環境,啟動後分別在環境內訪問檢測網站,兩個環境顯示的 Canvas hash 應該是不同的;如果完全一樣,說明 Canvas 參數沒做差異化處理,需要回到指紋設定裡檢查。環境啟動後右側會有「Fingerprint protection: Enabled」的綠色狀態,這個狀態亮起來代表當前環境的指紋防護已啟動。多帳號環境的具體搭建方法,可以看指紋瀏覽器上手教學。

先排除幾個「看起來有用、實際沒用」的辦法:
真正可行的是給 Canvas 渲染結果加「噪音」:讓瀏覽器在繪製時對像素數據做微小擾動,這樣每次檢測到的 hash 都和真實硬體的結果不同,平台就無法把它當作可信的關聯證據。
指紋瀏覽器把這件事做成了開關。以 MasBrowser 為例,建立環境時在指紋設定裡找到 Canvas 選項,選擇「噪音」模式即可。開啟後,每個環境的 Canvas hash 都會被隨機擾動,帳號之間不再共享同一個 Canvas 特徵;配合 WebRTC 禁止、語言時區與代理 IP 聯動,多帳號關聯的證據鏈基本斷乾淨。完整的獨立環境與指紋隔離配置,可以在 MasBrowser 多帳號安全管理頁面 查看。

實際操作中有一個細節值得注意:加噪音不是越「亂」越好。 如果 Canvas 結果每次打開都劇烈變化,反而像「機器在刻意躲避」,容易被風控標為異常。正確的做法是讓噪音保持穩定——環境建立後 hash 固定,只是與真實硬體不同。MasBrowser 的環境儲存後指紋參數是固化的,這點不用擔心。
會,但頻率很低。顯示卡驅動大版本更新、系統重裝、更換瀏覽器核心時,Canvas hash 可能變化;日常使用中基本穩定。這也是平台敢長期追蹤它的原因。
不能。Cookies 是存本機的檔案,Canvas 指紋是即時渲染的量測值,兩者機制完全不同。清快取對 Canvas 指紋沒有任何影響。
不影響頁面功能,只影響檢測到的 hash 值。網站照常載入、登入、下單都正常,只是「你畫出來的圖」和真實硬體略有差異。
Canvas 側重 2D 圖形渲染(字體、漸變、幾何圖形),WebGL 側重 3D GPU 渲染(著色器、顯示卡型號)。兩者都來自真實硬體渲染,經常配合使用、互相印證。
Canvas 指紋是瀏覽器指紋中最「誠實」的一項——它不靠你聲明什麼,而靠量測你的真實硬體。對普通用戶,它只是私隱焦慮的來源;對多帳號營運者,它是平台判定關聯的「主證據」,處理不好就一損俱損。
好在這項能力可以透過「渲染噪音」來管理。免費版就有 2 個環境配額,下載 MasBrowser,建一個環境打開 Canvas 噪音配置,啟動後看到右側綠色 "Fingerprint protection: Enabled"——這說明 Canvas 噪音、UA、時區、WebGL 等所有指紋參數都已就緒。