fingerprint2 一款開源設備指紋采集器,在github上有7k的Star,看起來是那么的讓人放心,今天聊一聊我們在使用這個庫中猜到的坑。
本篇所講的fingerprint2版本為2.0.6
生成的指紋大面積重復問題!!!
生成的指紋大面積重復問題!!!
生成的指紋大面積重復問題!!!
重要的問題講三次。
fingerprint2會取的設備信息
*獲取不到值時返回: not available #獲取不到值時返回: error
userAgent
:navigator.userAgent
language
: 語言
colorDepth
: 返回目標設備或緩沖器上的調色板的比特深度 screen.colorDepth *
deviceMemory
: 以千兆字節為單位返回設備內存量。該值是通過舍入到最接近的2的冪并將該數除以1024而給出的近似值。鏈接 *
pixelRatio
: 像素比 devicePixelRatio *
hardwareConcurrency
:navigator.hardwareConcurrency返回可用于運行在用戶的計算機上的線程的邏輯處理器的數量 *
screenResolution
: 檢測屏幕寬高,并根據屏幕方向矯正返回值[width,height]
availableScreenResolution
:返回屏幕分辨率[width,height]
,無頭瀏覽器無法獲取。*
timezoneOffset
: 返回從當前區域設置(主機系統設置)到UTC的時區差異(以分鐘為單位)鏈接
timezone
:時區 *
sessionStorage
: 是否支持sessionStorage,不支持時返回錯誤 #
localStorage
: 是否支持localStorage #
indexedDb
:是否支持indexedDb #
addBehavior
:此時可能未定義body或以編程方式刪除
openDatabase
: 返回是否支持Web SQL
cpuClass
:返回瀏覽器系統的 CPU 等級,一般無法獲取 *
platform
: 返回表示瀏覽器平臺的字符串,該規范允許瀏覽器始終返回空字符串,因此不要依賴此屬性來獲得可靠的答案.鏈接 *
doNotTrack
: 返回用戶的“不跟蹤”設置。如果用戶請求不被網站,內容或廣告跟蹤,則為“1”。一般結果為* 。
plugins
:返回瀏覽器安裝的插件列表。*
canvas
: 如果瀏覽器支持canvas則返回生成baes64數據。*
webgl
:返回瀏覽器對webgl繪圖協議的支持情況匯總 *
webglVendorAndRenderer
: 返會顯卡型號相關信息 *
adBlock
:返回是否安裝去廣告插件。
hasLiedLanguages
: 返回用戶是否改變了首選語言
hasLiedResolution
:返回用戶是否改變了分辨率
hasLiedOs
:返回用戶是否改變了操作系統
hasLiedBrowser
:返回用戶是否改變了瀏覽器
touchSupport
: 返回最大觸摸點數,是否支持touch,是否支持ontouchstart事件]
fonts
:返回從64種字體種篩選出的可用字體
fontsFlash
:Flash字體枚舉,如果沒有swfobject,不會觸發。
audio
: 返回音頻指紋
enumerateDevices
:navigator.mediaDevices 請求可用媒體輸入和輸出設備的列表,例如麥克風,相機,耳機等
工作邏輯
取到以上值后[數組],將數組轉為值字符串
將取到的字符串做為key 傳入x64hash128
方法,生成指紋
指紋重復原因
x64hash128
算法是固定的,所以在key相同的時,生成的指紋是相同的。 fingerprint2在手機上重復的概率會更高,絕大多數用戶不會去修改手機的配置,所以重復指紋主要在發生在同一型號的產品。
推薦解決生成指紋重復方案
因為我們主要面對移動終端用戶,所以fingerprint2生成的值出現大面積重復(實踐中的血與淚)。
Fingerprint2.get(components=>{
components.push({
key:'ip',
value:'192.168.1.1'
});
let murmur = Fingerprint2.x64hash128(components.join(""), 31);
})
加入ip信息,可以在很大程度上規避同型號的產品生成指紋信息相同的場景,切記不是百分之百。比如同一型號設備在同一wifi下生成的指紋信息也是有很大概率相同的。
結言
現在瀏覽器提供的設備信息越來越少,跟蹤用戶信息這只是一個思路,如果大家有奇技淫巧,歡迎交流。
該文章在 2023/8/4 0:53:20 編輯過