美文网首页
web追踪:如何用浏览器指纹锁定你的身份

web追踪:如何用浏览器指纹锁定你的身份

作者: 跹尘 | 来源:发表于2019-12-05 21:49 被阅读0次

    指纹是一个人的身份信息,在网络上你通过浏览器访问网站,也会在网站留下自己的信息。有的人会觉得自己没有登录账号,网站就不知道自己是谁。其实真有很多种方法知道你是谁。最简单的就是记录下你的ip地址。ip地址就含有足够多的信息。其实关键还是因为ip是稳定的,可以通过关联分析、交叉分析确定你的身份。那可以想一下,除了ip还有其他稳定的信息吗?其实有的,例如你的上网习惯,只要有足够多的数据,足以分析出来是否是你。这些信息是潜在的而且不容易察觉的。但是这篇文章主要想讲一个是,浏览器指纹,偏向技术类的文章。ip你有很多方式可以更换,但是只要你不是每次访问这个网站就换一个浏览器,而且也没这么多浏览器给你换,所以浏览器指纹可以算是一个稳定的特征。

    有些人把浏览器指纹分为1代、2代、2.5代,我是不太习惯这种说法,因为如果按代去区分的话,应该是相互替代的关系的,但是其实它们是可以共用的。

    最简化版本的浏览器指纹就是cookie,就是网站可以设置一个文件在你的浏览器上,并且可以读取到它,也就是说即使你换了ip,只要有cookie在,你就能被认出来。但是cookie是可以清除的,或者使用无痕模式,退出后轻松清除cookie。

    在HTTP协议中,header包含了客户端信息,内容如下

    {
    "headers": {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
    "Host": "httpbin.org",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "none",
    "Sec-Fetch-User": "1",
    "Upgrade-Insecure-Requests": "1",
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"
    }
    }

    解析一下这header头的内容:

    Accept:客户端可以接受的内容,常见的html文件、图片等。

    Accept-Encoding : 客户端可以接受的压缩编码类型。

    Accept-Language :客户端语言,其中q=0.9的意思是客户端偏向的语言,越大表示客户端越希望获得的语言。

    Host:请求的域名。

    Sec-Fetch-Mode、Sec-Fetch-Site、Sec-Fetch-User这三个是chrome特有的,所以当出现了这三个的时候就可以知道客户端为chrome浏览器。Sec-Fetch-Mode标识访问类型,例如navigate表示自然访问,Sec-Fetch-Site标识来源网站,可以知道是同源还是跨域,Sec-Fetch-User标识请求是否来自互动,例如点击了按钮。如果是通过机器发出的请求,这个参数就是false,也就是0,则可以判断是否是机器恶意请求。

    Upgrade-Insecure-Requests :标识客户端乐于接受并且可以处理安全链接(https);

    User-Agent:这个是最为丰富的信息了,包含客户端类型、系统平台、软件版本等信息。通过这条信息可以用来处理例如区分各个浏览器、系统的访客。通过这条可以模糊的判断身份。但是这个信息却是可以随便伪造和篡改的。所以也不可信。

    那难道没有牢靠的方法锁定你的身份了吗?当然是有,这表主要介绍一种最简单有效的方法——canvas指纹。任何普通开发者都可以掌握。

    canvas指纹的原理如下

    相同的HTML5 Canvas元素绘制操作,在不同操作系统、不同浏览器上,产生的图片内容不完全相同。在图片格式上,不同浏览器使用了不同的图形处理引擎、不同的图片导出选项、不同的默认压缩级别等。在像素级别来看,操作系统各自使用了不同的设置和算法来进行抗锯齿和子像素渲染操作。即使相同的绘图操作,产生的图片数据的CRC检验也不相同。

    知道了原理,就懂得怎么实现了。很简单,只要创建一个canvas,然后绘制一个任意突然,然后获取它的base64编码,就可以了。相同的浏览器,访问不同的网站,得到的编码是一致的。而且这个特征是无法清除的。

    防范的办法也很简单,换个浏览器就行了。但是因为浏览器的可选范围比较少,而且用户换浏览器的习惯也比较少,所以这个方法的还算是比较可靠。

    至于应用场景,就有很多了。例如你访问了某个评测网站,看某款产品的评测,这个网站记录下了你的canvas指纹,然后卖给电商网站。等你上电商网站的时候,你就能看到给你推荐你刚刚看到的产品了。

    独立博客:http://xianchen.cc

    相关文章

      网友评论

          本文标题:web追踪:如何用浏览器指纹锁定你的身份

          本文链接:https://www.haomeiwen.com/subject/mqwjgctx.html