胜而不灭,霸而不辱,这才是真正的征服。 收藏本站
登陆 / 注册 搜索

阅读: 359   回复: 1

[# 网络安全] 什么是浏览器指纹?

空谷幽兰 仗剑天涯 2020-6-5 12:00 |显示全部楼层

从前车马很慢,书信很远,一生只够爱一个人,但是可以纳很多妾啊!

精华达人 主题破百 以坛为家 论坛元老
本帖最后由 空谷幽兰 于 2020-6-5 15:45 编辑

今天谈谈浏览器的“指纹”是如何暴露你的隐私,顺便分享一些防范技巧。

一、啥是“指纹”

什么是浏览器指纹? r0_242_2584_1695_w1200_h678_fmax.jpg

看过警匪片或者破案小说的同学,应该都知道“指纹”在刑侦中的作用——警方虽然没有直接看到犯罪现场的作案人员,但可以根据现场留下的指纹来猜测/判断作案人员。

如果你时常接触信息安全领域的一些资料,也会听到“指纹”这个形象的说法(比如:操作系统指纹、网络协议栈指纹、等等)。IT 领域提到的“指纹”一词,其原理跟“刑侦”是类似的——“当你需要研究某个对象的类型/类别,但这个对象你又无法直接接触到。这时候你可以利用若干技术来获取该对象的某些特征,然后根据这些特征来猜测/判断该对象的类型/类别。”

二、啥是“指纹”的“信息量”

在 IT 领域有各种各样的特征可以用来充当“指纹”。这时候就需要判断,用哪个特征做指纹,效果更好。为了讨论这个问题,就得扫盲一下“指纹的信息量”。

为了帮助大伙儿理解,先举一个例子:

假设你要在学校中定位某个人,如果你光知道此人的性别,你是比较难定位的(只能排除 1/2 的人);反之如果你不知道性别,但是知道此人的生日,就比较容易定位(可以排除掉大约 364/365 的人,只剩大约 1/365 的人)。为啥捏?因为“生日”比“性别”更加独特,所以“生日”比“性别”能够提供更多的信息量。

从这个例子可以看出:某个特征越独特,则该特征的信息量越大;反之亦然。信息量越大的特征,就可以把对象定位到越小的范围。


三、“指纹”的“信息量”如何度量——关于指纹的比特数

(本节涉及到中学数学,数学很差的或者对数学有恐惧感的读者,请直接无视)

在 IT 领域中,可以用比特数来衡量某个指纹所包含的信息量。为了通俗起见,先以前面提到的“性别”来说事儿。性别只有两种可能性——“男”或者“女”,并且男女的比例是大致平均的。(那些喜欢抬杠的同学,别跟我扯啥双性人,我没空搭理)所以,当你知道了某人的性别,就可以把范围缩小到原先的 1/2。用 IT 的术语来讲,就是:“性别”这个特征只包含“一个比特”的信息量。

以此类推。

当我们说:某特征包含3比特信息量,意思就是:该特征会有8种大致平均的可能性(8等于2的3次方)。一旦知道该特征,可以把目标定位到八分之一。

当我们说:某特征包含7比特信息量,意思就是:该特征会有128种大致平均的可能性(128=2^7)。一旦知道该特征,可以定位到 1/128
再来说“生日”。(不考虑闰年的情况下)生日有365种可能性(并且也是平均分布滴),所以生日包含的比特数大约是 8.51。为啥是 8.51 捏,因为“2 的 8.51 次方”约等于 365。

因此,知道了某人的生日就可以把范围缩小到 1/365。

通过上述举例,大伙儿对于指纹的信息量,应该有一些粗浅的认识了吧?

四、多个指纹的综合定位

如果能同时获取互不相关的若干个指纹,就可以大大增加定位的精确性。

比如要在某个公司里面定位某人,如果你知道此人的“生日”和“生肖”,那么就可以达到 1/4380(1/4380 = 1/12 * 1/365) 的定位精度。因为综合定位之后,比例之间是乘法的关系,所以范围就被急剧缩小了。

为啥我特别强调“互不相关”捏?假如你同时知道的信息是“生日”和“星座”,那么定位的精度依然是 1/365——因为生日的信息已经包含了星座的信息。所以,只有那些相互独立的特征(所谓的相互独立,数学称为“正交”),在综合定位的时候才可以用乘法。


五、啥是“浏览器的指纹”

前面说的是预备知识,现在开始进入正题。

当你使用浏览器访问某个网站的时候,浏览器必定会暴露某些信息给这个网站。为啥我强调“必定”捏?因为这些信息中,有些是跟 HTTP 协议相关的(本章节说的 HTTP 协议是广义的,也包括 HTTPS)。只要你基于 HTTP 协议访问网站,浏览器就必定会传输这些信息给网站的服务器。

再罗嗦一下:HTTP 协议是 Web 的基石。只要你通过浏览器访问 Web,必定是基于 HTTP 协议的。因此,Web 网站的服务器必定可以获取到跟你的浏览器相关的某些信息(具体是哪些信息,我下面会聊)。

“浏览器指纹”的机制跟 cookie 有点相似。

对于“浏览器指纹”导致的隐私问题,我举2个例子来说明其危害。

1.对于无需登录的网站

如果你的浏览器允许记录 cookie,当你第一次访问某网站的时候,网站会在你的浏览器端记录一个 cookie,cookie 中包含某个“唯一性的标识信息”。

下次你再去访问该网站,网站服务器先从你的浏览器中读取 cookie 信息,然后就可以根据 cookie 中的“唯一标识”判断出,你之前曾经访问过该网站,并且知道你上次访问该网站时,干了些啥。对付这种 cookie 很简单,你只需要在前后两次访问之间,清空浏览器的 cookie,网站就没法用 cookie 的招数来判断你的身份。

但是“清空 cookie”这招对“浏览器指纹”是无效滴!比如说你的浏览器具有非常独特的指纹,那么当你第一次访问某网站的时候,网站会在服务器端记录下你的浏览器指纹,并且会记录你在该网站的行为;下次你再去访问的时候,网站服务器再次读取浏览器指纹,然后跟之前存储的指纹进行比对,就知道你是否曾经来过,并且知道你上次访问期间干了些啥。

2.对于需要登录的网站

假如网站没有采用“指纹追踪”的技术,那么你可以在该网站上注册若干个帐号(马甲)。当你需要切换身份的时候,只需要先注销用户,清空浏览器的 cookie,然后用另一个帐号登录。网站是看不出来的。

一旦网站采用“指纹追踪”的技术,即使你用上述方式伪造马甲,但因为你用的是同一个浏览器,浏览器指纹相同。网站的服务器软件可以猜测出,这两个帐号来自同一个人。

刚才对比了“浏览器指纹”和“cookie”两种身份追踪技术。两者的原理类似——都是利用某些特殊的信息来定位你的身份。两者的本质差异在于:

1. cookie 需要把信息保存在浏览器端,所以会被用户发现,也会被用户清除。
2. 而“浏览器指纹”无需在客户端保存任何信息,不会被用户发觉,用户也无法清除(换句话说:你甚至无法判断你访问的网站到底有没有收集浏览器指纹)。


六、“浏览器指纹”包含哪些信息

浏览器暴露给网站的信息有很多种,常见的有如下几种:

1.User Agent

关于 User Agent 是啥,简单来说就是服务器识别用户用什么浏览器、操作系统、等内容的一个字符串。

例如这个就是微信浏览器的 UA
  1. Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12A365 MicroMessenger/5.4.1 NetType/WIFI
复制代码



2.屏幕分辨率

这个比较通俗易懂。我稍微补充一下:这一项不仅包括屏幕的尺寸,还包括颜色深度(比如你的屏幕是16位色、24位色、还是32位色)。

3.时区

这个也比较通俗。对于大部分国内的网友,你的时区应该都是“东8区”

4.浏览器的插件信息

也就是你的浏览器装了哪些插件。再罗嗦一次:浏览器的“插件”和“扩展”是两码事儿,别搞混了。

5.字体信息

和浏览器相关的一些字体信息。如果你的浏览器安装了 Flash 或 Java 插件,有可能会暴露某些字体信息。

6.Canvas 绘图的指纹

Canvas 是 HTML5 新增的一个功能。该功能可以让 JavaScript 脚本在页面的 canvas 元素中绘图。由于不同的浏览器类型,不同的浏览器版本,不同的操作系统平台,都会导致“Canvas 绘图”在一些细节方面的差异。因此,该功能也会暴露浏览器信息(成为“浏览器指纹”的一部分)。

要想测试你的浏览器是否暴露“Canvas 绘图指纹”,可以查看“这个链接”。

如果你用的是 Firefox 浏览器,可以安装“这个扩展”,来禁用 canvas 绘图功能。该扩展可以针对不同的域名配置“黑名单和白名单”。

7.HTTP ACCEPT

这是 HTTP 协议头中的一个字段。考虑到列位看官大都不是搞 IT 技术的,我就不深入解释这项。

8.其它

以上就是常见的浏览器指纹。当然啦,还有其它一些信息也可以成为“浏览器指纹”,考虑到篇幅,我就不一一列举并解释了。有兴趣的同学,请自行阅读 Mozilla 官网的文档


放我一个人生活 「出类拔萃」 2020-6-5 12:00 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

看起来不错
您需要登录后才可以回帖 登录 | 免费注册  

本版积分规则

关于本站|大事记|小黑屋|古黑论 网站统计

GMT+8, 2020-10-26 17:20 , Processed in 0.033533 second(s), 22 queries , Redis On.

© 2015-2020 GuHei.Net

Powered by Discuz! X3.4

快速回复 返回列表