瀏覽器指紋定義
指紋,即我們常說的指紋,比如手指的紋理,每個人的指紋都是唯一的,所以我們可以用指紋識別器記錄用戶指紋來唯一判別和認(rèn)證一個用戶。在網(wǎng)絡(luò)安全領(lǐng)域也會聽到一些“指紋”的說法,比如,操作系統(tǒng)指紋,網(wǎng)絡(luò)設(shè)備指紋等等?!拔ㄒ恍浴焙汀胺€(wěn)定性”奠定了指紋識別作為一種新型且可靠的追蹤方式的基礎(chǔ)。
1、提出
瀏覽器指紋,是EFF(電子前哨基金會)提出的一項(xiàng)追蹤技術(shù)。瀏覽器指紋技術(shù)可以匿名識別瀏覽器,并且準(zhǔn)確率高達(dá)94%。EFF通過提取瀏覽器中的8個獨(dú)立的特征屬性,使用字符串進(jìn)行描述,{ user_agent, plugins, fonts, video, supercookies, http accept, timezone, cookie enabled },有些瀏覽器特征可以通過簡單的HTTP請求獲得,有些則需要通過AJAX來收集。
每項(xiàng)瀏覽器特征都攜帶不同bit的信息熵,提取的八項(xiàng)瀏覽器特征共包含18.1 bits的信息熵,這意味著在286,777個指紋中才會出現(xiàn)一個與你的瀏覽器相同的瀏覽器指紋。EFF使用Murmur Hash算法對這些信息進(jìn)行哈希計算并返回一個32位字符串,這個字符串即唯一的瀏覽器指紋。如圖所示:
2、發(fā)展
GitHub上一位用戶根據(jù)EFF發(fā)表的文章,用Javascript實(shí)現(xiàn)了快速的瀏覽器指紋庫——Fingerprintjs,并且之后對該庫再一次做了些改進(jìn),形成了Fingerprintjs2。作者在改進(jìn)的Fingerprintjs2庫中添加了一些對新型特征的檢測以及新型的識別技術(shù)。
新型的識別技術(shù)有:
Canvas:HTML5的動態(tài)繪圖標(biāo)簽,也是Fingerprintjs2中添加的新型追蹤技術(shù)。由于不同的瀏覽器使用不同的圖像處理引擎,不同的導(dǎo)數(shù)選項(xiàng),不同的壓縮等級,所以不同的電腦繪制出的圖形也會有不同,而這些不同可以被用來給用戶設(shè)備分配特定編號,即指紋。Canvas的toDataURL()方法返回的是圖片內(nèi)容的base64位編碼字符串,其最后的32位CRC校驗(yàn)碼可以用于用戶的唯一標(biāo)識。EFF的瀏覽器指紋測試中沒有截取最后的校驗(yàn)碼,而是對獲取到的所有base64位編碼hash運(yùn)算壓縮成32位的字符串,即瀏覽器指紋檢測中的Hash of canvas fingerprint(如上圖所示)。
WebGL:一種3D繪圖標(biāo)準(zhǔn),對獲取到的瀏覽器的WebGL功能測試結(jié)果,通過hash運(yùn)算生成32位字節(jié)碼,即Hash of WebGL fingerprint。
3、跟進(jìn)
隨后,EFF在其官方檢測網(wǎng)站中也使用 Fingerprintjs2作為指紋信息收集模塊(在線瀏覽器指紋監(jiān)測網(wǎng)址:https://panopticlick.eff.org/ )。下面將詳細(xì)介紹除了新型的識別技術(shù)以外的瀏覽器指紋收集工作是怎么展開的。
瀏覽器指紋信息
以下是一些指紋特征信息的簡單示例,以及這些特征的獲取方式:
1、基本屬性
User Agent:指用戶代理,即瀏覽器,包括硬件平臺,系統(tǒng)軟件,應(yīng)用軟件和用戶個人偏好等信息。User Agent是瀏覽器navigator對象的一個屬性,可通過navigator.userAgent獲取瀏覽器信息。根據(jù)User Agent信息可以判斷用戶所使用的瀏覽器及版本等信息,不同的瀏覽器的信息也有很大的不同
Platform:代表用戶使用的瀏覽器所在的平臺,可通過navigator.platform獲取。
Language:代表瀏覽器當(dāng)前使用的語言。可通過navigator.language獲取。
Screen Size:即瀏覽器分辨率,屏幕分辨率可由screen.width(屏幕的寬)以及screen,height(屏幕的高)組合得到。同理,Color Depth是瀏覽器的色彩深度,可由screen.colorDepth屬性獲取到。
Time Zone:Javascript的Data對象的getTimezoneOffset() 函數(shù)用于返回協(xié)調(diào)通用時間(UTC)與當(dāng)前主機(jī)時間之間的分鐘差值。
2、檢測類屬性
Are Cookie Enabled? :瀏覽網(wǎng)站為用戶設(shè)置Cookie,通過返回的Cookie值可以判斷用戶是否禁用Cookie。
DNT header Enabled?:檢測用戶瀏覽器是否設(shè)置“禁止追蹤”(Do Not Track)來避免被第三方網(wǎng)站追蹤網(wǎng)絡(luò)痕跡。navigator.doNotTrack的值代表著用戶對瀏覽器的不同設(shè)置。
Limited supercookie test : 通過HTML5的localStorage和sessionStorage屬性檢測瀏覽器是否支持本地存儲。IE的userData對象可以檢測是否在瀏覽器客戶端設(shè)置了永久性的會話數(shù)據(jù)。
Touch Support:對觸屏功能進(jìn)行檢測,通過檢測navigator.maxTouchPoints以及TouchEvent對象和ontouchstart事件,綜合判斷瀏覽器是否支持觸屏操作,判斷瀏覽器終端是PC端或是移動端。
Browser Plugin Details:使用ActiveXObject對象對IE瀏覽器的插件進(jìn)行檢測,對非IE瀏覽器通過navigator.plugins屬性獲取瀏覽器的插件列表。
System fonts:通過檢測Flash的window.swfobje和swfobject.hasFlashPlayerVersion()等屬性和方法來檢測字體。如果瀏覽器不支持Flash,則使用JS對字體進(jìn)行枚舉檢測。
展望
當(dāng)然瀏覽器指紋也存在自身的弊端,用戶瀏覽器特征信息的變化都會造成指紋的改變。比如瀏覽器的升級以及插件的安裝。同一用戶瀏覽器指紋的不一致是與Cookie相比之下的缺陷,即“穩(wěn)定性”不夠好。EFF在其網(wǎng)站測試中對每一個瀏覽的用戶設(shè)定一個Cookie值,用于輔助檢測。除了設(shè)定Cookie作為用戶標(biāo)識之外,最近幾年的一些研究一直在探尋能夠有效關(guān)聯(lián)同一用戶的不同階段的指紋值的方法,瀏覽器指紋取代Cookie或許指日可待。
該文章在 2022/7/15 9:34:32 編輯過