Canvas是HTML5 API,用于通過JavaScript中的腳本在網頁上繪制圖形和動畫。
但除此之外,畫布還可以用作Web瀏覽器指紋中的附加熵,并用于在線跟蹤。
該技術基于以下事實:同一張畫布圖像可以在不同的計算機中以不同的方式呈現。發生這種情況有幾個原因。在圖像格式級別– Web瀏覽器使用不同的圖像處理引擎,圖像導出選項,壓縮級別,即使最終圖像是像素相同的,最終圖像也可能會獲得不同的校驗和。在系統級別–操作系統具有不同的字體,它們使用不同的算法和設置進行抗鋸齒和亞像素渲染。
您可以查看Web瀏覽器是否支持Canvas,并檢查此技術是否可以跟蹤您。此外,還將進行一些持續的研究,以顯示現實生活中畫布指紋的獨特性和持久性,以及是否在BrowserLeaks數據庫中簽名(此處未收集任何信息!)。
與其他“瀏覽器檢測”技巧不同,它處理了許多與圖形環境有關的OS功能。潛在地,它可以用于識別視頻適配器,尤其是如果您將使用WebGL分析,而不僅僅是Canvas 2D上下文。順便說一句,不同的圖形卡驅動程序有時也會影響常規字體的呈現。
這個小巧的GIF動畫演示了如何可以從35個不同的用戶那里更改畫布圖像。代碼沒有更改,但是每個框架都不同:
從數據庫摘要中可以看到,到目前為止,我們已經能夠收集的唯一圖像數為數千。
這是產生像素的JavaScript代碼:
//帶有小寫/大寫/標點符號的文本
var txt = “ BrowserLeaks,com <canvas> 1.0” ;
ctx.textBaseline = “ top” ;
//最常見的類型
ctx.font = “ 14px'Arial '” ;
ctx.textBaseline = “字母順序”;
ctx.fillStyle = “#f60” ;
ctx.fillRect(125,1,62,20);
//一些顏色混合技巧,可增加渲染差異
ctx.fillStyle = “#069” ;
ctx.fillText(txt,2,15);
ctx.fillStyle = “ rgba( 102,204,0,0.7 )” ;
ctx.fillText(txt,4,17);
要從畫布創建簽名,我們必須使用toDataURL()函數從應用程序的內存中導出像素,該函數將返回二進制圖像文件的base64編碼的字符串。然后我們可以創建此字符串的MD5哈希,甚至從IDAT塊中提取CRC校驗和,該IDAT塊位于每個PNG文件末尾的16到12個字節之間,這就是我們的Canvas Fingerprint。