什么是浏览器指纹? |
本帖最后由 空谷幽兰 于 2020-6-5 15:45 编辑
今天谈谈浏览器的“指纹”是如何暴露你的隐私,顺便分享一些防范技巧。 一、啥是“指纹”🥷🧣🔋😷👀 看过警匪片或者破案小说的同学,应该都知道“指纹”在刑侦中的作用——警方虽然没有直接看到犯罪现场的作案人员,但可以根据现场留下的指纹来猜测/判断作案人员。 如果你时常接触信息安全领域的一些资料,也会听到“指纹”这个形象的说法(比如:操作系统指纹、网络协议栈指纹、等等)。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 网站的服务器必定可以获取到跟你的浏览器相关的某些信息(具体是哪些信息,我下面会聊)。 🚐🥄🅰🪶 “浏览器指纹”的机制跟 有点相似。 对于“浏览器指纹”导致的隐私问题,我举2个例子来说明其危害。 👂🚗🍞🚭🐖1.对于无需登录的网站 如果你的浏览器允许记录 cookie,当你第一次访问某网站的时候,网站会在你的浏览器端记录一个 cookie,cookie 中包含某个“唯一性的标识信息”。 下次你再去访问该网站,网站服务器先从你的浏览器中读取 cookie 信息,然后就可以根据 cookie 中的“唯一标识”判断出,你之前曾经访问过该网站,并且知道你上次访问该网站时,干了些啥。对付这种 cookie 很简单,你只需要在前后两次访问之间,清空浏览器的 cookie,网站就没法用 cookie 的招数来判断你的身份。 🦴🦼🥛🆒🐻 但是“清空 cookie”这招对“浏览器指纹”是无效滴!比如说你的浏览器具有非常独特的指纹,那么当你第一次访问某网站的时候,网站会在服务器端记录下你的浏览器指纹,并且会记录你在该网站的行为;下次你再去访问的时候,网站服务器再次读取浏览器指纹,然后跟之前存储的指纹进行比对,就知道你是否曾经来过,并且知道你上次访问期间干了些啥。 2.对于需要登录的网站 👨🎨👜⚒😷 假如网站没有采用“指纹追踪”的技术,那么你可以在该网站上注册若干个帐号(马甲)。当你需要切换身份的时候,只需要先注销用户,清空浏览器的 cookie,然后用另一个帐号登录。网站是看不出来的。 一旦网站采用“指纹追踪”的技术,即使你用上述方式伪造马甲,但因为你用的是同一个浏览器,浏览器指纹相同。网站的服务器软件可以猜测出,这两个帐号来自同一个人。 刚才对比了“浏览器指纹”和“cookie”两种身份追踪技术。两者的原理类似——都是利用某些特殊的信息来定位你的身份。两者的本质差异在于: 👎🌞🥛🈷🦄 1. cookie 需要把信息保存在浏览器端,所以会被用户发现,也会被用户清除。 2. 而“浏览器指纹”无需在客户端保存任何信息,不会被用户发觉,用户也无法清除(换句话说:你甚至无法判断你访问的网站到底有没有收集浏览器指纹)。 🤙🪐🥛❗🐤 六、“浏览器指纹”包含哪些信息浏览器暴露给网站的信息有很多种,常见的有如下几种: 1.User Agent 👈🚠🔪↔🐅 关于 是啥,简单来说就是服务器识别用户用什么浏览器、操作系统、等内容的一个字符串。 例如这个就是微信浏览器的 UA
🧑🚀🛍📏😔👃 2.屏幕分辨率 这个比较通俗易懂。我稍微补充一下:这一项不仅包括屏幕的尺寸,还包括颜色深度(比如你的屏幕是16位色、24位色、还是32位色)。 👁⛴🍧🆎🦖 3.时区 这个也比较通俗。对于大部分国内的网友,你的时区应该都是“东8区” 👊🥄🉑🐤4.浏览器的插件信息 也就是你的浏览器装了哪些插件。再罗嗦一次:浏览器的“插件”和“扩展”是两码事儿,别搞混了。 5.字体信息🧓🛍📞😫🤛 和浏览器相关的一些字体信息。如果你的浏览器安装了 Flash 或 Java 插件,有可能会暴露某些字体信息。 6.Canvas 绘图的指纹 👨🚒👒🧻🙂💪 Canvas 是 HTML5 新增的一个功能。该功能可以让 JavaScript 脚本在页面的 canvas 元素中绘图。由于不同的浏览器类型,不同的浏览器版本,不同的操作系统平台,都会导致“Canvas 绘图”在一些细节方面的差异。因此,该功能也会暴露浏览器信息(成为“浏览器指纹”的一部分)。 要想测试你的浏览器是否暴露“Canvas 绘图指纹”,可以查看“ ”。 如果你用的是 Firefox 浏览器,可以安装“ ”,来禁用 canvas 绘图功能。该扩展可以针对不同的域名配置“黑名单和白名单”。 👀⛵🦀🆎🐺 7. 这是 HTTP 协议头中的一个字段。考虑到列位看官大都不是搞 IT 技术的,我就不深入解释这项。 ✍🛩🫑🚷🕊8.其它 以上就是常见的浏览器指纹。当然啦,还有其它一些信息也可以成为“浏览器指纹”,考虑到篇幅,我就不一一列举并解释了。有兴趣的同学,请自行阅读
帖子热度 4793 ℃
|
|