fingerprint2生成的用戶指紋重複踩坑

fingerprint2 一款開源設備指紋採集器,在github上有7k的Star,看起來是那麼的讓人放心,今天聊一聊咱們在使用這個庫中猜到的坑。html

本篇所講的fingerprint2版本爲2.0.6html5

生成的指紋大面積重複問題!!!git

生成的指紋大面積重複問題!!!es6

生成的指紋大面積重複問題!!!github

重要的問題講三次。web

fingerprint2會取的設備信息

*獲取不到值時返回: not available #獲取不到值時返回: error算法

  1. userAgent:navigator.userAgent
  2. language : 語言
  3. colorDepth: 返回目標設備或緩衝器上的調色板的比特深度 screen.colorDepth *
  4. deviceMemory: 以千兆字節爲單位返回設備內存量。該值是經過舍入到最接近的2的冪並將該數除以1024而給出的近似值。連接 *
  5. pixelRatio: 像素比 devicePixelRatio *
  6. hardwareConcurrency:navigator.hardwareConcurrency返回可用於運行在用戶的計算機上的線程的邏輯處理器的數量 *
  7. screenResolution: 檢測屏幕寬高,並根據屏幕方向矯正返回值[width,height]
  8. availableScreenResolution:返回屏幕分辨率[width,height],無頭瀏覽器沒法獲取。*
  9. timezoneOffset: 返回從當前區域設置(主機系統設置)到UTC的時區差別(以分鐘爲單位)連接
  10. timezone:時區 *
  11. sessionStorage: 是否支持sessionStorage,不支持時返回錯誤 #
  12. localStorage: 是否支持localStorage #
  13. indexedDb:是否支持indexedDb #
  14. addBehavior:此時可能未定義body或以編程方式刪除
  15. openDatabase: 返回是否支持Web SQL
  16. cpuClass:返回瀏覽器系統的 CPU 等級,通常沒法獲取 *
  17. platform: 返回表示瀏覽器平臺的字符串,該規範容許瀏覽器始終返回空字符串,所以不要依賴此屬性來得到可靠的答案.連接 *
  18. doNotTrack: 返回用戶的「不跟蹤」設置。若是用戶請求不被網站,內容或廣告跟蹤,則爲「1」。通常結果爲*
  19. plugins:返回瀏覽器安裝的插件列表。*
  20. canvas: 若是瀏覽器支持canvas則返回生成baes64數據。*
  21. webgl:返回瀏覽器對webgl繪圖協議的支持狀況彙總 *
  22. webglVendorAndRenderer: 返會顯卡型號相關信息 *
  23. adBlock:返回是否安裝去廣告插件。
  24. hasLiedLanguages: 返回用戶是否改變了首選語言
  25. hasLiedResolution:返回用戶是否改變了分辨率
  26. hasLiedOs:返回用戶是否改變了操做系統
  27. hasLiedBrowser:返回用戶是否改變了瀏覽器
  28. touchSupport: 返回最大觸摸點數,是否支持touch,是否支持ontouchstart事件]
  29. fonts:返回從64種字體種篩選出的可用字體
  30. fontsFlash:Flash字體枚舉,若是沒有swfobject,不會觸發。
  31. audio: 返回音頻指紋
  32. enumerateDevices:navigator.mediaDevices 請求可用媒體輸入和輸出設備的列表,例如麥克風,相機,耳機等

工做邏輯

  1. 取到以上值後[數組],將數組轉爲值字符串
  2. 將取到的字符串作爲key 傳入x64hash128方法,生成指紋

指紋重複緣由

x64hash128算法是固定的,因此在key相同的時,生成的指紋是相同的。 fingerprint2在手機上重複的機率會更高,絕大多數用戶不會去修改手機的配置,因此重複指紋主要在發生在同一型號的產品。sql

推薦解決生成指紋重複方案

由於咱們主要面對移動終端用戶,因此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下生成的指紋信息也是有很大機率相同的。canvas

結言

如今瀏覽器提供的設備信息愈來愈少,跟蹤用戶信息這只是一個思路,若是你們有奇技淫巧,歡迎交流。

相關文章
相關標籤/搜索