什么是浏览器指纹

  浏览器指纹可以通过浏览器对网站可见的配置、设置信息,来跟踪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%

演示查看浏览器指纹:浏览器指纹_全面综合的浏览器指纹在线查看

什么是浏览器指纹-这篇文章全面告诉你答案相关推荐

  1. 视频配音软件哪个好用?这篇文章来告诉你

    如今短视频是一个非常火的行业,各类短视频平台越来越多,而我们在日常的生活或者工作中会或多或少的接触到短视频,甚至我们还会去制作一些视频.大家应该都知道,在视频的制作过程中,配音是非常重要的,那么大家知 ...

  2. 想知道哪个音频翻译成文字的软件好用?这篇文章能够给你答案

    在日常办公中,我们不仅需要处理大量的工作文件,还要开大大小小的会议,有了会议就少不了会议纪要,但是笔速又跟不上领导的讲话速度,所以大部分人都会选择将会议记录全程以音频的形式录制下来,想着会议结束后再从 ...

  3. 无损放大图片的软件叫什么?这篇文章来告诉你

    在日常的生活中,想必大家都会对拍摄完的图片进行简单的P图操作,比如我们需要将一张图片放大,然后在某个地方添加一些文字或是表情,但是因为图片的像素无法改变,而导致放大后的图片看起来不是很清晰,这时要怎么 ...

  4. 视频变漫画软件叫什么?这篇文章来告诉你

    随着短视频地不断兴起,很多人喜欢自己制作拍摄短视频上传到网络上,各种各样的风格,有清新学院风.舒适田园风,还有的人喜欢使用一些特效,把自己变成漫画风格的,那你知道把视频变漫画的手机软件叫什么吗?感兴趣 ...

  5. 一篇文章,告诉你,2017年,面试中你需要注意的

    此篇文章我会从三个方面去陈述: 一.面试中你需要注意的 二.打造一份高质量的简历 三.最重要的,面试中你需要会的 各位看官,执笔不易,还请耐心看完(关注左侧公众号,获取更多内容). 2017年的市场行 ...

  6. R or Python,到底学哪个?这篇文章来告诉你......

    R和Python是目前最流行的两款高级编程语言,被大量运用于数据科学领域.两者都是开源的,也都有非常活跃的社区来支撑.那么问题来了:对于初学者,到底应该学哪个? 我的建议:看情况(it depends ...

  7. 数据库领域顶会SIGMOD背后的故事,这篇文章全部告诉你~

    SIGMOD数据管理国际会议(Special Interest Group on Management Of Data.)是由美国计算机协会(ACM)数据管理专业委员会(SIGMOD)发起.在数据库领 ...

  8. 小米8护眼模式无效_雷军没有交代的小米9的N个细节,这篇文章全告诉你了

    想要了解更多热门资讯.玩机技巧.数码评测.科普深扒,可以点击右上角关注我们的头条号:雷科技 ---------------------------------- 2月20日下午,小米在北京正式发布了新 ...

  9. 学了编程却写出错误代码?程序运行结果与想象不符?当bug出现时该何去何从,别担心,这篇文章统统告诉你!手把手带你调试代码,让bug原形毕露!

    [手把手带你搞定]实用调试技巧 什么是bug 调试及调试的重要性 什么是调试 调试的基本步骤 1. 发现程序错误的存在 2. 以隔离.消除等方式对错误进行定位 3. 确定错误产生的原因 4. 提出纠正 ...

最新文章

  1. 【 English 】与个人品质有关的英语词汇
  2. Java this 心得
  3. Vue+G2:Please specify the container for the chart! + Cannot read property ‘appendChild‘ of null
  4. writer在java中的意思_Java在FileWriter和BufferedWriter之间的区别
  5. mysql 取交集 php_mysql 查询结果取交集的方法
  6. java tostring方法_Java虚拟机如执行方法调用的(二)?
  7. leetcode 11
  8. android listview的理解,Android ListView的理解
  9. 热门话题“看第一学历招人公平吗?”数据告诉你,网友们都是如何想的
  10. 28线性空间02——坐标、坐标变换与基变换、过度矩阵
  11. Mocha: 58同城 App 基于卡片的线上 AB 测(线上卡片动态换)
  12. android 倒计时 动画下载,我的倒计时软件下载-我的倒计时 安卓版v1.1.50-PC6安卓网...
  13. python解二阶微分方程组_python:利用多种方式解微分方程(以二阶微分系统零状态响应为例)...
  14. 量子力学入门---基本概念
  15. 北风:二类电商“空手套白狼”的赚钱套路
  16. python曲线拟合预测_python曲线拟合
  17. 关于域名备案后的注意事项,血淋淋的教训
  18. python-web开发[12]之css案例、bootstrap探索
  19. JVM(java堆)
  20. 4.SPSS24安装教程

热门文章

  1. php数组遍历方法,php常用的遍历数组的方法有哪些
  2. 慧通编程第4关 - 魔法学院第6课
  3. 养猫小程序(前半部分)
  4. 汇编语言和C语言编写程序各有什么优缺点,C语言和汇编语言在单片机开发中,各有什么优缺点?...
  5. Vue中使用echarts实现柱状图(双柱)
  6. 实现macOS热门功能,我只用了60行代码
  7. VS2010更换主题界面
  8. windows 10 蓝屏解决办法(亲测有用哦!!!)
  9. 新北洋SNBC BTP-M180II 打印机驱动
  10. 以pptp方式登陆管理单口旁路由