fingerprint2 一款開源設備指紋採集器,在github上有7k的Star,看起來是那麼的讓人放心,今天聊一聊咱們在使用這個庫中猜到的坑。html
本篇所講的fingerprint2版本爲2.0.6html5
生成的指紋大面積重複問題!!!git
生成的指紋大面積重複問題!!!es6
生成的指紋大面積重複問題!!!github
重要的問題講三次。web
*獲取不到值時返回: 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 請求可用媒體輸入和輸出設備的列表,例如麥克風,相機,耳機等x64hash128
方法,生成指紋x64hash128
算法是固定的,因此在key相同的時,生成的指紋是相同的。 fingerprint2在手機上重複的機率會更高,絕大多數用戶不會去修改手機的配置,因此重複指紋主要在發生在同一型號的產品。sql
由於咱們主要面對移動終端用戶,因此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下生成的指紋信息也是有很大機率相同的。canvas
如今瀏覽器提供的設備信息愈來愈少,跟蹤用戶信息這只是一個思路,若是你們有奇技淫巧,歡迎交流。