fingerprint2 一款開源裝置指紋採集器,在github上有7k的Star,看起來是那麼的讓人放心,今天聊一聊我們在使用這個庫中猜到的坑。
本篇所講的fingerprint2版本為2.0.6
生成的指紋大面積重複問題!!!
生成的指紋大面積重複問題!!!
生成的指紋大面積重複問題!!!
重要的問題講三次。
fingerprint2會取的裝置資訊
*獲取不到值時返回: not available #獲取不到值時返回: error
userAgent
:navigator.userAgentlanguage
: 語言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 SQLcpuClass
:返回瀏覽器系統的 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生成的值出現大面積重複(實踐中的血與淚)。
- 通過介面獲取使用者ip值
- FingerPrint2繼續使用預設配置,在傳入的
key
中手動新增Ip
條件;Fingerprint2.get(components=>{ components.push({ key:'ip', value:'192.168.1.1' //通過介面獲取的到ip }); let murmur = Fingerprint2.x64hash128(components.join(""), 31); //生成指紋資訊 }) 複製程式碼
加入ip資訊,可以在很大程度上規避同型號的產品生成指紋資訊相同的場景,切記不是百分之百。比如同一型號裝置在同一wifi下生成的指紋資訊也是有很大概率相同的。
結言
現在瀏覽器提供的裝置資訊越來越少,跟蹤使用者資訊這只是一個思路,如果大家有奇技淫巧,歡迎交流。