瀏覽器字體指紋:本機(jī)字體獲取及防范方法

瀏覽器JavaScript? API:window.queryLocalFonts() 方法,用于查詢本地系統(tǒng)中可用的字體列表,返回所有本地可用字體,即電腦上所有安裝的所有字體。

用于前端編程改善用戶體驗(yàn)使用,一般用作:

  • 字體選擇:在一些web應(yīng)用中,用戶可能需要選擇自己喜歡的字體來顯示文本。通過查詢本地字體列表,可以向用戶展示可用的字體選項(xiàng),讓用戶自定義頁面的外觀。
  • 字體匹配:如果你需要在瀏覽器中顯示特定字體的文本,你可以使用window.queryLocalFonts()來檢查用戶計(jì)算機(jī)上是否存在該字體。如果字體不存在,你可以提供替代方案,如使用默認(rèn)字體或其他可用字體。
  • 字體預(yù)加載:在某些情況下,你可能希望在頁面加載時(shí)預(yù)加載特定的字體文件,以便后續(xù)在頁面中使用。通過查詢本地字體列表,你可以確定是否需要加載特定字體文件。

然而,這種原本的便捷性也給用戶的隱私帶來了一定的威脅。由于每臺(tái)電腦所安裝軟件的差異性,會(huì)導(dǎo)致每臺(tái)電腦的字體列表存在差異,而通過瀏覽器 queryLocalFonts() 方法,可通過字體的差異來進(jìn)行字體指紋識(shí)別,對客戶端進(jìn)行指紋跟蹤。

驗(yàn)證步驟:

F12打開瀏覽器控制臺(tái),輸入如下代碼:

let pickedFonts = await self.queryLocalFonts();
for (const fontData of pickedFonts) {
    console.log(fontData.fullName);
}

會(huì)彈出詢問“使用您計(jì)算機(jī)上的字體,以便您能夠創(chuàng)作高保真內(nèi)容”

如果你不知道這是什么意思,隨手點(diǎn)了個(gè)“允許”,此時(shí)安裝在你電腦上的字體將會(huì)被全部列出,造成泄漏。如下圖:

如何防止本機(jī)字體指紋泄漏:

使用影子指紋瀏覽器進(jìn)行安全瀏覽,防止網(wǎng)站進(jìn)行本機(jī)字體識(shí)別,軟件默認(rèn)會(huì)禁用所有敏感權(quán)限,按需開啟,防止指紋泄漏。