栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > Web开发 > JavaScript

什么是浏览器指纹?这篇文章全面告诉你答案!

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

   

  什么是浏览器指纹


  浏览器指纹可以通过浏览器对网站可见的配置、设置信息,来跟踪Web浏览器,它就像我们人手上的指纹一样,具有个体辨识度,只不过现阶段浏览器指纹辨别的是浏览器。


  浏览器指纹辨识的信息可以是UA、时区、地理位置或者是使用的语言等等,浏览器所开发的信息决定了浏览器指纹的准确性。


  对于网站而言,拿到浏览器指纹并没有实际价值,真正有价值的是浏览器指纹对应的用户信息。作为网站站长,收集用户浏览器指纹并记录用户的操作,是一个有价值的行为,特别是针对没有用户身份的场景。


  例如一个视频网站,未注册该网站的用户A喜欢浏览二次元的视频,通过浏览器指纹记录这个,那么下次可以直接向该浏览器推送二次元的视频。因为现在的上网设备大都是私人的,这样的推送方式很容易获得大部分用户的好感,从而使之成为网站的用户。



   

  浏览器指纹的发展


  浏览器指纹技术的发展跟大多数技术一样,并非一蹴而就的,现有的几代浏览器指纹技术是这样的:


  第一代是状态化的,主要集中在用户的cookie和evercookie上,需要用户登录才可以得到有效的信息。


  第二代才有了浏览器指纹的概念,通过不断增加浏览器的特征值从而让用户更具有区分度,例如UA、浏览器插件信息等


  第三代是已经将目光放在人身上了,通过收集用户的行为、习惯来为用户建立特征值甚至模型,可以实现真正的追踪技术。但是目前实现比较复杂,依然在探索中。


  目前浏览器指纹的追踪技术可以算是进入2.5代,这么说是因为跨浏览器识别指纹的问题仍没有解决。


  指纹采集


  信息熵(entropy)是接收的每条消息中包含的信息的平均量,信息熵越高,则能传输越多的信息,信息熵越低,则意味着传输的信息越少。


  浏览器指纹是由许多浏览器的特征信息综合起来的,其中特征值的信息熵也不尽相同。因此,指纹也分为基本指纹和高级指纹。


  「基本指纹」


  基本指纹就是容易被发现和修改的部分,如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"
  }}


  除了http中拿到的指纹,还可以通过其他方式来获得浏览器的特征信息,例如:


  每个浏览器的UA


  浏览器发送的HTTPACCEPT标头


  浏览器中安装的浏览器扩展/插件,例如Quicktime,Flash,Java或Acrobat,以及这些插件的版本


  计算机上安装的字体。


  浏览器是否执行Javascript脚本


  浏览器是否能种下各种cookie和“supercookies”


  是否浏览器设置为“DoNotTrack”


  系统平台(例如Win32、Linuxx86)


  系统语言(例如cn、en-US)


  浏览器是否支持触摸屏


  拿到这些值后可以进行一些运算,得到浏览器指纹具体的信息熵以及浏览器的uuid。


  这些信息就类似人类的体重、身高、肤色一样,有很大的重复概率,只能作为辅助识别,所以我们需要更精确的指纹来判断唯一性。


  「高级指纹」


  普通指纹是不够区分独特的个人,这时就需要高级指纹,将范围进一步缩小,甚至生成一个独一无二的跨浏览器身份。


  用于生产指纹的各个信息,有权重大小之分,信息熵大的将拥有较大的权重。


    


  「Canvas指纹」


  Canvas是HTML5中的动态绘图标签,也可以用它生成图片或者处理图片。即便使用Canvas绘制相同的元素,但是由于系统的差别,字体渲染引擎不同,对抗锯齿、次像素渲染等算法也不同,Canvas将同样的文字转成图片,得到的结果也是不同的。


  实现代码大致为:在画布上渲染一些文字,再用toDataURL转换出来,即便开启了隐私模式一样可以拿到相同的值。


function getCanvasFingerprint () {    
    var canvas = document.createElement('canvas');    
    var context = canvas.getContext("2d");    
    context.font = "18pt Arial";    
    context.textbaseline = "top";    
    context.fillText("Hello, user.", 2, 2);    
    return canvas.toDataURL("image/jpeg");
}
getCanvasFingerprint()



  流程很简单,渲染文字,toDataURL是将整个Canvas的内容导出,得到值。


  「WebGL指纹」


  WebGL(Web图形库)是一个JavascriptAPI,可在任何兼容的Web浏览器中渲染高性能的交互式3D和2D图形,而无需使用插件。WebGL通过引入一个与OpenGLES2.0非常一致的API来做到这一点,该API可以在HTML5元素中使用。这种一致性使API可以利用用户设备提供的硬件图形加速。网站可以利用WebGL来识别设备指纹,一般可以用两种方式来做到指纹生产:


  WebGL报告——完整的WebGL浏览器报告表是可获取、可被检测的。在一些情况下,它会被转换成为哈希值以便更快地进行分析。


  WebGL图像——渲染和转换为哈希值的隐藏3D图像。由于最终结果取决于进行计算的硬件设备,因此此方法会为设备及其驱动程序的不同组合生成唯一值。这种方式为不同的设备组合和驱动程序生成了唯一值。


  可以通过Browserleakstest检测网站来查看网站可以通过该API获取哪些信息。


  产生WebGL指纹原理是首先需要用着色器(shaders)绘制一个梯度对象,并将这个图片转换为base64字符串。然后枚举WebGL所有的拓展和功能,并将他们添加到base64字符串上,从而产生一个巨大的字符串,这个字符串在每台设备上可能是非常独特的。


  怎么获取浏览器指纹?


  最主要的需求就是判断本次请求的用户到底是新用户还是老用户还是机器人。通过request去分析ip、ua、mac地址都有各种缺点导致不准确。


  Fingerprintjs2是通过纯前端原生js实现的浏览器指纹采集器,通过获取浏览器中所有能获取到的信息(部分通过base64转成String),最后生成出md5,用于该用户在该设备上的唯一标识码,官方宣称准确度高达99.5%



演示查看浏览器指纹:https://www.wk8.com.cn/it/fingerpirnt/


  

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/766663.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号