浏览器指纹
以下介绍仅为原理,生成请使用成熟的包 fingerPrintJs
浏览器指纹:通过浏览的设置信息,网站配置来跟踪 WEB 浏览器(用户)的方法。之所以称之为”指纹”,是因为在常规情况下,期望浏览器指纹是和人的指纹一样,是唯一的
浏览器指纹辨识度可以为:IP 地址,时区,地理位置(经纬度),User-Agent,语言,操作系统…
追踪用户的技术实现
- 通过 session 和 cookie 追踪,是基于用户登录
- 浏览器指纹
- 基于用户的行为(浏览习惯、设置…)、习惯建立特征值、模型
普通指纹
- IP
- HTTP Headers 中的各种信息
- …
高级指纹
- Canvas 指纹:利用 Canvas 在每个浏览器,每个机器的渲染参数、抗锯齿等算法不同,生成的图片 DataURI 也不同
const canvas = document.getElementById("canvas");const ctx = canvas.getContext("2d");
context.font = "18px Arial";ctx.fillText("Hello word", 2, 2);
canvas.toDataURL("image/jpeg");-
AudioContext:利用硬件差异,生成的不同的音频输出
-
WebRTC: 网页实时通信,可以让浏览器音视频或其他任意数据的实时传输,通过 WebRTC 的能力,可以获取用户真实 IP(NAT 穿透)
-
…
跨浏览器指纹
在以上浏览器指纹中,有一个很大的缺陷,就是用户更换浏览器或更换电脑后,无法追踪,此时可以使用如下参数进行修正
- Task(a)~Task(r): 利用显卡渲染图片的功能的特征值
- List of fonts(JS): 获取页面字体支持的情况
- TimeZone: 时区
- CPU 核心数: 可通过 navigator.hardwareConcurrency,或者其他的 polyfill core-estimator,大致原理是借用 Web Worker 能力,监听 payload 时间,计算硬件达到最大的并发时间,以计算内核数量
- …
防范
- 禁用 JS
- 浏览器插件,例如 Tor Browser 工具
- HTTP 头部,DNT 标识,Do Not Track,但大多数网站并没有遵守此约定
- …