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