前一篇介紹了“
瀏覽器指紋的基本概念”今天這篇分享一些防范的技巧。
★防范“指紋”的一般性原則?
不管是哪一種特征,要想成為“指紋”至少要具備兩個條件:“唯一性”和“穩(wěn)定性”。比如人類手指的紋路就同時具有“唯一性”和“穩(wěn)定性”——任意兩個人的紋路都不同,而且每個人的紋路終生不變。所以,要對付“指紋識別”,咱們就必須反其道而行——破壞“唯一性”和“穩(wěn)定性”。對瀏覽器而言,做到這兩點并不難。且聽俺細細道來。
★瀏覽器指紋的關(guān)鍵性信息
前一篇博文已經(jīng)給大伙兒介紹了 EFF 的瀏覽器指紋測試工具(鏈接在“
這里”)。通過這個工具可以明顯看出,User Agent 的信息量最大,至少占據(jù)一半以上的信息量。換句話說,其它所有特征的信息量加起來都沒有 User Agent 大。而且除了 User Agent,其它特征的信息量都比較小。這說明啥捏?
請大伙兒換位思考一下:如果某個網(wǎng)站想要利用瀏覽器指紋進行用戶身份定位,User Agent 是必不可少的一項。缺少這一項,定位的精度會大打折扣。所以,User Agent 是瀏覽器指紋的關(guān)鍵性信息。
俺已經(jīng)在博客中多次嘮叨了“
二八原理”,瀏覽器指紋中的 User Agent 就是這關(guān)鍵性的“20%”。下面俺來介紹:如何破壞 User Agent 的“唯一性”和“穩(wěn)定性”。
★“多瀏覽器”方案
這個方案最簡單,也最容易想到。一看這個小標題,估計大部分讀者都猜到俺想噴啥口水。
如果你同時具有兩個不同的瀏覽器(比如一個 Firefox 一個 Chrome),那么這兩個瀏覽器必然具有不同的 User Agent。如果某個網(wǎng)站收集了瀏覽器指紋,而你又想在這個網(wǎng)站注冊兩個不同的馬甲,那么你就可以用“多瀏覽器方案”——分別用不同的瀏覽器注冊不同的馬甲。
本方案的優(yōu)點 操作很簡單,會裝瀏覽器的同學(xué)都玩。
本方案的缺點 瀏覽器的種類畢竟有限(知名且靠譜的瀏覽器,一只手都能數(shù)過來)。萬一你想注冊十多個馬甲,用這個方案就顯得傻B了。
★“多實例”方案
為了解決“多瀏覽器方案”的局限性,自然會想到“多實例”這個方案。此招數(shù)俺曾經(jīng)在《
如何防止黑客入侵》系列博文中介紹過。
在主流的三大瀏覽器中,F(xiàn)irefox 和 Chrome 支持“多實例”,IE 不支持。所以那些喜歡 IE 的同學(xué)就沒法用這招了。
關(guān)于 Firefox 和 Chrome 如何配置多實例,請看俺之前的博文(
這里)。對于用 Chrome 的同學(xué),俺再次羅嗦一下:Chrome 同時提供“多用戶”(洋文叫“Multiple Profiles”)和“多實例”(洋文叫“Multiple Accounts”)兩種功能,這兩者是完全不同滴。它的“多用戶”依然在同一個“實例”中。
配置完“多實例”之后,一定要記得修改每一個實例的 User Agent,并確保兩兩不同。至于如何修改 User Agent 請參見“
這篇博文”——里面提供了三大主流瀏覽器的修改方法。
本方案的優(yōu)點 瀏覽器的實例可以配置任意多個(只要你有耐心,硬盤夠大,配幾百幾千都可以)。
本方案的缺點 某些瀏覽器(比如 IE)不支持多實例。
★“多虛擬機”方案
要對付 User Agent 的指紋,前面兩招基本夠用了。但某些同學(xué)可能有特殊需求,或者安全要求比較高,所以俺順便介紹第三種方法。
第三種方法就是利用虛擬機軟件安裝不同的虛擬系統(tǒng),然后在每個虛擬系統(tǒng)中安裝瀏覽器。沒用過虛擬化軟件的同學(xué),先看俺之前的掃盲教程(在“
這里”)。再次羅嗦:如果你在不同的虛擬機中安裝相同的瀏覽器,要記得修改每個虛擬機中瀏覽器的 User Agent。
本方案的優(yōu)點 優(yōu)點1:前面說了,某些瀏覽器不支持多實例。萬一你偏偏喜歡這種瀏覽器,就可以考慮用“多虛擬機”的方案。
優(yōu)點2:因為屏幕分辨率、系統(tǒng)時區(qū)也都是指紋特征。所以在虛擬系統(tǒng)中,你還可以調(diào)整屏幕分辨率和時區(qū)(使之不同于你真實系統(tǒng)的分辨率和時區(qū))。
本方案的缺點 缺點1:你需要額外安裝虛擬化軟件,然后再安裝虛擬系統(tǒng)。過程稍嫌繁瑣。對技術(shù)菜鳥也有難度。
缺點2:對系統(tǒng)的硬件有一定的要求(如果你的電腦硬件太寒酸,就別考慮這招了)。
★“動態(tài) User Agent”方案
善于思考的同學(xué)會發(fā)現(xiàn):前面三個招數(shù),其本質(zhì)是相通滴。說白了都是利用技術(shù)手段“隔離”出不同的瀏覽器環(huán)境,然后單獨修改每個環(huán)境的指紋,以此來偽造出多個身份。但是對于每一個具體的環(huán)境,其指紋依然是固定的。換句話說,前面那三個招數(shù)都是針對“唯一性”。下面俺要介紹的招數(shù)可以用來破壞“穩(wěn)定性”。
前面說了,瀏覽器指紋的信息量,至少有一半以上是來自于 User Agent。所以要破壞瀏覽器指紋的穩(wěn)定性,只要讓瀏覽器的 User Agent 動態(tài)變化即可。下面分別說明技術(shù)思路(以下的招數(shù)適合于有一定折騰能力的同學(xué),需要用到一點編寫腳本的伎倆)。
◇如何構(gòu)造隨機的 User Agent
要構(gòu)造隨機的 User Agent ,其實也不難。到“
這個網(wǎng)站”可以看到各種各樣瀏覽器的 User Agent。你可以收集一大堆預(yù)存著,然后每次從中隨機挑選一條作為你的偽裝。為了做到每次隨機挑選并設(shè)置,你可以寫一個腳本來干這事兒,然后順便讓這個腳本來幫你啟動瀏覽器。
再嘮叨一下:挑選 User Agent 是有講究滴,要盡量選擇那些比較常見的 User Agent——越常見的 User Agent 所包含的信息量越小。
◇Firefox
三大瀏覽器中,最有利于隱私保護的是 Firefox(具體的原因分析請看本系列
前面的博文),所以先說它的技術(shù)實現(xiàn)。
對于默認安裝的 Firefox,在
%APPDATA%\Mozilla\Firefox\Profiles 目錄下可以看到 Firefox 【
默認實例】的目錄(目錄名類似于“xxxxxxxx.default”)。進入該目錄會看到一個 user.js 的文件(如果沒有的話就自己新建一個)。
俺之前介紹過,想要偽造一個【
靜態(tài)】的 User Agent,只需修改 user.js,往里面添加如下代碼。代碼中的 xxx 就是要偽造的 User Agent。
user_pref("general.useragent.override", "xxx");
至于要偽造【
動態(tài)】的 User Agent,只需用腳本來自動修改 user.js 文件里面的這行代碼,生成一個隨機的 User Agent。修改完再用這個腳本把 Firefox 啟動起來。
對于 Windows 下的 Firefox,可以用 VBScript 或 JScript 或 PowerShell 這三種系統(tǒng)內(nèi)置的腳本;對于 Linux 或蘋果系統(tǒng),可以嘗試各種 shell 腳本。
某些愛思考的同學(xué)可能會問,為啥不直接在 user.js 里面用 javascript 代碼進行 User Agent 的隨機設(shè)定。俺曾經(jīng)也企圖這么干,好像不行 :( 不信你自己試試看。
◇Chrome
對于 Chrome,可以在命令行參數(shù)指定其 User Agent,具體請參見“
這篇博文”。
所以,你只需在腳本中啟動 Chrome,每次都傳遞一個隨機的 User Agent 作為命令行參數(shù)。
對于 Windows 下的 Chrome,可以用 VBScript 或 JScript 或 PowerShell 這三種系統(tǒng)內(nèi)置的腳本;對于 Linux 或蘋果系統(tǒng),可以嘗試各種 shell 腳本。
◇IE
對于 IE 的 User Agent,需要修改注冊表的鍵值(
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\User Agent)。所以捏,可以通過事先寫好的腳本(VBScript 或 JScript 或 PowerShell)往相應(yīng)的注冊表鍵值中寫入隨機的User Agent,然后再由這個腳本啟動 IE。
★后記
補充說明幾點:
◇對于“動態(tài) UserAgent 方案”,為啥不直接給出代碼
估計肯定有人會抱怨這個。提醒一下:【
授人以魚不如授人以漁】是本博客長期奉行的原則。所以在技術(shù)方面,俺更愿意分享一些思路,盡量避免直接給出現(xiàn)成的東西。自己動手實踐,有助于能力的提升而且印象更深刻。
如果你是個程序猿/程序媛,寫這樣一個腳本應(yīng)該是易如反掌滴;如果你不是搞技術(shù)的,順便學(xué)一下簡易的腳本編程(其實很容易滴)。不會編程的同學(xué),俺建議從 Python 開始入手,功能強且門檻低,具體請參見《
為啥俺推薦 Python》系列博文。
◇關(guān)于 EFF 的瀏覽器指紋測試
前一篇博文介紹了 EFF 的瀏覽器指紋測試工具,估計很多同學(xué)都去測試了。其實捏,不必太在意具體每一項的“比特數(shù)”。大伙兒只需要關(guān)注其“定性”而不必太在意其“定量”。因為 EFF 網(wǎng)站目前收集的樣本還不夠多(只有幾百萬),所以其分析出的信息量(相比全球的統(tǒng)計數(shù)據(jù))會有所偏差。
另外,很多人測試下來的總信息量是 21.85 bits,這是因為 EFF 的總樣本目前只有 370萬 左右(370萬 約等于 2的21.85次方)。所以比特數(shù)到 21.85 就封頂了。
回到本系列的目錄
版權(quán)聲明
本博客所有的原創(chuàng)文章,作者皆保留版權(quán)。轉(zhuǎn)載必須包含本聲明,保持本文完整,并以超鏈接形式注明作者編程隨想和本文原始地址:
http://program-think.blogspot.com/2014/01/privacy-protection-6.html