浏览器指纹简介

1、什么是浏览器指纹

什么是浏览器指纹?一种比较通俗的说法是:当使用浏览器访问网站时,网站会在浏览器中执行一段 JavaScript(以下简称 JS)脚本, JS 脚本能够把当前浏览器的所有相关信息查询出来,并对查询出来的信息进行编码,间接形成一个唯一的标识,我们把这个唯一的标识称之为浏览器指纹。

听起来有些晦涩,我们以智能音箱“天猫精灵”的一个小游戏 “你想我猜” 来做个对比,这个游戏内容是:你在心里想一个人物,天猫精灵会问你一些问题, 如:他是男的吗?他是封建王朝的人物吗?他结过婚吗?等等,当你回答了这些问题后(一般不超过20个问题),天猫精灵就会告诉你,你心里想的那个人物是谁。

浏览器指纹本质上也是如此。一段指纹信息包含的内容可能有:当前浏览器内核是什么版本?浏览器所在主机的分辨率是多少?所在主机安装了什么显卡? 显卡的驱动程序是什么版本?安装了哪些字体?安装了哪些插件?浏览器播放音频的设备有几个?设备编码分别是什么? 也许这些信息看起来就像天猫精灵问你的问题一样,都是通用的、非特定的问题,但当这些问题的答案组合在一起, 天猫精灵就可以判断出来你心里想的是谁,而浏览器的这些信息就可以汇总成判断当前浏览器唯一性的 “编码标识”, 我们把这个 “编码标识” 形象的称之为浏览器指纹。

简而言之,网站可以通过浏览器指纹来判断浏览器的唯一性,并进而判断使用浏览器的用户的唯一性——即便你并没有登录网站,但网站仅仅通过你的浏览器指纹, 便能够判断出当前访问者是谁。

以下图为例,便展示了一个浏览器指纹所包含的相关信息。  

   

《浏览器指纹信息》

2、关于浏览器指纹特征码

在计算机学科中有一个 “消息摘要算法”,是指对输入内容进行某种计算,从而形成一个唯一的特征码,而输入内容的任何一点变化,都将影响到生成的特征码。 在花漾中,会对浏览器指纹包含的所有信息进行消息摘要算法,计算结果是一个16进制的数字,我们称其为 “浏览器指纹特征码”, 您可以通过特征码的唯一性来验证浏览器指纹是否重复。  

   

《浏览器指纹特征码》

3、关于电脑浏览器与手机浏览器

浏览器指纹模板与指纹实例既可以是电脑浏览器,也可以是手机浏览器。当给一个浏览器分身绑定了电脑浏览器的指纹实例时,打开其对应的花漾浏览器则为电脑浏览器; 当给一个浏览器分身绑定了手机浏览器的指纹实例时,打开其对应的花漾浏览器则为手机浏览器,这两者之间的差异如下图所示:  

   

《电脑浏览器与手机浏览器》

4、浏览器指纹的动态属性

浏览器指纹实例共计6个大项20多个子项的属性设置,其中,并不是所有的属性都是一成不变的,部分属性只有在“运行期”才会拥有最终的真实值,我们把这部分属性称之为指纹的“动态属性”。 举个例子,“分辨率”是指纹的一个选项,但分辨率的值只有将指纹实例绑定在一个分身上,并在打开花漾浏览器的那一刻(此时就是所谓的“运行期”),才会拥有最终的真实值, 而“分辨率”这个动态属性最终的真实值就是浏览器所在主机的分辨率。

这也从另一方面证明了部分指纹浏览器产品让用户自行设置分辨率是一件非常愚蠢的行为。举个简单的例子,你设置指纹分辨率为4K,但事实上你的电脑分辨率只有2K, 网站很容易判断出来浏览器的指纹信息是伪造的。

4.1 分辨率

如前文所述,分辨率只有在打开浏览器实例的那一刻,才会拥有最终的真实值,也就是浏览器所在主机的分辨率。  

   

《指纹实例动态属性:分辨率》

4.1 语言、经纬度、时区

严格说来、语言、经纬度、时区,这三个属性都是跟IP地址紧密相关的。举个简单的例子,如果IP地址位于中国广东深圳,那么经纬度也应该在深圳的某个位置, 同样道理,此时的时区应该是Asia/ShangHai,而语言最好也是中文。当然,语言并不是强制选项,因为语言可以由用户手动配置, 你不能否认 “一个位于广东深圳、时区为Asia/ShangHai的外国人,访问网站的第一优先语言设置为英文” 这种情况的存在,因为这是合理的真实场景。

   

《指纹实例动态属性:语言、经纬度、时区》

但我们需要强调的是,默认情况下,指纹信息中的“语言、经纬度、时区”这三个属性的取值,是通过IP地址获取的。 换言之,当通过访问分身以打开花漾指纹浏览器实例后,指纹信息中的语言、经纬度、时区等属性值,会根据IP地址所在的地理位置动态获得。

这里需要指出的是,语言属性的最终取值,往往会影响到访问网站时的语言选项,关于这部分更详细的介绍请参考 网站的语言设置 一节。

当网站需要获取经纬度时,浏览器会弹出是否允许获取位置的窗口,如果此时点击允许,则浏览器会把指纹信息中的经纬度值返回给网站,如下图所示:

   

《浏览器获取经纬度请示》

对花漾浏览器来说,此时,它会根据IP所在地理位置,获得一个当前位置的经纬度返回给网站,当然,你也可以自行设置一个指纹实例或模板的经纬度与时区, 如下图所示:  

   

《更改指纹实例或模板的经纬度与时区属性》

当然,需要提醒您的是,如果您要自行设置指纹实例或模板的经纬度与时区属性时,请务必确保,它们和你所绑定的IP地址的地理位置是相匹配的。

最后更新于 2024-07-05 22:40
回到顶部