前一篇介绍了“浏览器指纹的基本概念”今天这篇分享一些防范的技巧。

★防范“指纹”的一般性原则?

  不管是哪一种特征,要想成为“指纹”至少要具备两个条件:“唯一性”和“稳定性”。比如人类手指的纹路就同时具有“唯一性”和“稳定性”——任意两个人的纹路都不同,而且每个人的纹路终生不变。所以,要对付“指纹识别”,咱们就必须反其道而行——破坏“唯一性”和“稳定性”。对浏览器而言,做到这两点并不难。且听俺细细道来。

★浏览器指纹的关键性信息

  前一篇博文已经给大伙儿介绍了 EFF 的浏览器指纹测试工具(链接在“这里”)。通过这个工具可以明显看出,User Agent 的信息量最大,至少占据一半以上的信息量。换句话说,其它所有特征的信息量加起来都没有 User Agent 大。而且除了 User Agent,其它特征的信息量都比较小。这说明啥捏?
  请大伙儿换位思考一下:如果某个网站想要利用浏览器指纹进行用户身份定位,User Agent 是必不可少的一项。缺少这一项,定位的精度会大打折扣。所以,User Agent 是浏览器指纹的关键性信息。
  俺已经在博客中多次唠叨了“二八原理”,浏览器指纹中的 User Agent 就是这关键性的“20%”。下面俺来介绍:如何破坏 User Agent 的“唯一性”和“稳定性”。

★“多浏览器”方案

  这个方案最简单,也最容易想到。一看这个小标题,估计大部分读者都猜到俺想喷啥口水。
  如果你同时具有两个不同的浏览器(比如一个 Firefox 一个 Chrome),那么这两个浏览器必然具有不同的 User Agent。如果某个网站收集了浏览器指纹,而你又想在这个网站注册两个不同的马甲,那么你就可以用“多浏览器方案”——分别用不同的浏览器注册不同的马甲。
  本方案的优点
  操作很简单,会装浏览器的同学都玩。
  本方案的缺点
  浏览器的种类毕竟有限(知名且靠谱的浏览器,一只手都能数过来)。万一你想注册十多个马甲,用这个方案就显得傻B了。

★“多实例”方案

  为了解决“多浏览器方案”的局限性,自然会想到“多实例”这个方案。此招数俺曾经在《如何防止黑客入侵》系列博文中介绍过。
  在主流的三大浏览器中,Firefox 和 Chrome 支持“多实例”,IE 不支持。所以那些喜欢 IE 的同学就没法用这招了。
  关于 Firefox 和 Chrome 如何配置多实例,请看俺之前的博文(这里)。对于用 Chrome 的同学,俺再次罗嗦一下:Chrome 同时提供“多用户”(洋文叫“Multiple Profiles”)和“多实例”(洋文叫“Multiple Accounts”)两种功能,这两者是完全不同滴。它的“多用户”依然在同一个“实例”中。
  配置完“多实例”之后,一定要记得修改每一个实例的 User Agent,并确保两两不同。至于如何修改 User Agent 请参见“这篇博文”——里面提供了三大主流浏览器的修改方法。
  本方案的优点
  浏览器的实例可以配置任意多个(只要你有耐心,硬盘够大,配几百几千都可以)。
  本方案的缺点
  某些浏览器(比如 IE)不支持多实例。

★“多虚拟机”方案

  要对付 User Agent 的指纹,前面两招基本够用了。但某些同学可能有特殊需求,或者安全要求比较高,所以俺顺便介绍第三种方法。
  第三种方法就是利用虚拟机软件安装不同的虚拟系统,然后在每个虚拟系统中安装浏览器。没用过虚拟化软件的同学,先看俺之前的扫盲教程(在“这里”)。再次罗嗦:如果你在不同的虚拟机中安装相同的浏览器,要记得修改每个虚拟机中浏览器的 User Agent。
  本方案的优点
  优点1:前面说了,某些浏览器不支持多实例。万一你偏偏喜欢这种浏览器,就可以考虑用“多虚拟机”的方案。
  优点2:因为屏幕分辨率、系统时区也都是指纹特征。所以在虚拟系统中,你还可以调整屏幕分辨率和时区(使之不同于你真实系统的分辨率和时区)。
  本方案的缺点
  缺点1:你需要额外安装虚拟化软件,然后再安装虚拟系统。过程稍嫌繁琐。对技术菜鸟也有难度。
  缺点2:对系统的硬件有一定的要求(如果你的电脑硬件太寒酸,就别考虑这招了)。

★“动态 User Agent”方案

  善于思考的同学会发现:前面三个招数,其本质是相通滴。说白了都是利用技术手段“隔离”出不同的浏览器环境,然后单独修改每个环境的指纹,以此来伪造出多个身份。但是对于每一个具体的环境,其指纹依然是固定的。换句话说,前面那三个招数都是针对“唯一性”。下面俺要介绍的招数可以用来破坏“稳定性”。
  前面说了,浏览器指纹的信息量,至少有一半以上是来自于 User Agent。所以要破坏浏览器指纹的稳定性,只要让浏览器的 User Agent 动态变化即可。下面分别说明技术思路(以下的招数适合于有一定折腾能力的同学,需要用到一点编写脚本的伎俩)。

◇如何构造随机的 User Agent

  要构造随机的 User Agent ,其实也不难。到“这个网站”可以看到各种各样浏览器的 User Agent。你可以收集一大堆预存着,然后每次从中随机挑选一条作为你的伪装。为了做到每次随机挑选并设置,你可以写一个脚本来干这事儿,然后顺便让这个脚本来帮你启动浏览器。
  再唠叨一下:挑选 User Agent 是有讲究滴,要尽量选择那些比较常见的 User Agent——越常见的 User Agent 所包含的信息量越小。

◇Firefox

  三大浏览器中,最有利于隐私保护的是 Firefox(具体的原因分析请看本系列前面的博文),所以先说它的技术实现。
  对于默认安装的 Firefox,在 %APPDATA%MozillaFirefoxProfiles 目录下可以看到 Firefox 【默认实例】的目录(目录名类似于“xxxxxxxx.default”)。进入该目录会看到一个 user.js 的文件(如果没有的话就自己新建一个)。
  俺之前介绍过,想要伪造一个【静态】的 User Agent,只需修改 user.js,往里面添加如下代码。代码中的 xxx 就是要伪造的 User Agent。

user_pref(“general.useragent.override”, “xxx”);

  至于要伪造【动态】的 User Agent,只需用脚本来自动修改 user.js 文件里面的这行代码,生成一个随机的 User Agent。修改完再用这个脚本把 Firefox 启动起来。
  对于 Windows 下的 Firefox,可以用 VBScript 或 JScript 或 PowerShell 这三种系统内置的脚本;对于 Linux 或苹果系统,可以尝试各种 shell 脚本。
  某些爱思考的同学可能会问,为啥不直接在 user.js 里面用 javascript 代码进行 User Agent 的随机设定。俺曾经也企图这么干,好像不行 :( 不信你自己试试看。

◇Chrome

  对于 Chrome,可以在命令行参数指定其 User Agent,具体请参见“这篇博文”。
  所以,你只需在脚本中启动 Chrome,每次都传递一个随机的 User Agent 作为命令行参数。
  对于 Windows 下的 Chrome,可以用 VBScript 或 JScript 或 PowerShell 这三种系统内置的脚本;对于 Linux 或苹果系统,可以尝试各种 shell 脚本。

◇IE

  对于 IE 的 User Agent,需要修改注册表的键值(HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionInternet SettingsSER AGENT)。所以捏,可以通过事先写好的脚本(VBSCRIPT 或 JSCRIPT 或 POWERSHELL)往相应的注册表键值中写入随机的USER AGENT,然后再由这个脚本启动 IE。

★后记

  补充说明几点:

◇对于“动态 USERAGENT 方案”,为啥不直接给出代码

  估计肯定有人会抱怨这个。提醒一下:【授人以鱼不如授人以渔】是本博客长期奉行的原则。所以在技术方面,俺更愿意分享一些思路,尽量避免直接给出现成的东西。自己动手实践,有助于能力的提升而且印象更深刻。
  如果你是个程序猿/程序媛,写这样一个脚本应该是易如反掌滴;如果你不是搞技术的,顺便学一下简易的脚本编程(其实很容易滴)。不会编程的同学,俺建议从 PYTHON 开始入手,功能强且门槛低,具体请参见《为啥俺推荐 PYTHON》系列博文。

◇关于 EFF 的浏览器指纹测试

  前一篇博文介绍了 EFF 的浏览器指纹测试工具,估计很多同学都去测试了。其实捏,不必太在意具体每一项的“比特数”。大伙儿只需要关注其“定性”而不必太在意其“定量”。因为 EFF 网站目前收集的样本还不够多(只有几百万),所以其分析出的信息量(相比全球的统计数据)会有所偏差。
  另外,很多人测试下来的总信息量是 21.85 BITS,这是因为 EFF 的总样本目前只有 370万 左右(370万 约等于 2的21.85次方)。所以比特数到 21.85 就封顶了。

回到本系列的目录

本文由自动聚合程序取自网络,内容和观点不代表数字时代立场

中国数字时代亚马逊镜像(墙内可直接点击)