浏览器与追踪

浏览器指纹

约 4 分钟阅读

什么是浏览器指纹

浏览器指纹是一种通过组合浏览器设置和环境信息来识别个体用户的技术。就像人的指纹一样,浏览器特征的组合对每个用户来说几乎是唯一的。

Cookie 不同,指纹技术无需在浏览器中存储任何内容即可追踪用户,因此即使删除 Cookie,追踪仍会持续。

收集的信息

用于生成指纹的主要信息包括:

  • User-Agent:浏览器类型、版本和操作系统信息
  • 屏幕分辨率:显示器尺寸和色深
  • 已安装字体:系统中安装的字体列表
  • Canvas 渲染结果:HTML5 Canvas 绘图结果的哈希值(因 GPU 和驱动差异而不同)
  • WebGL 信息:GPU 厂商和渲染器详情
  • 时区和语言设置:浏览器的语言和地区设置
  • 插件列表:已安装的扩展程序

这些信息单独来看很普通,但组合起来可以在数百万人中识别出个人。根据 EFF 的研究,浏览器指纹的唯一性约达 83.6%。

防护措施

完全防御很困难,但以下方法可以降低指纹的唯一性:

  • 使用 Tor 浏览器:所有用户共享相同的指纹,是最有效的对策。
  • Firefox 增强型追踪保护:在「严格」模式下阻止已知的指纹收集脚本。
  • 浏览器隔离:为不同用途使用不同的浏览器配置文件,可以切断跨站追踪。
  • 限制 JavaScript:使用 NoScript 等扩展限制 JavaScript,可以使许多指纹技术失效,但可能会限制网站功能。

指纹技术的类型与技术原理

指纹技术根据信息获取方式大致分为两类。

被动指纹仅使用 HTTP 请求头中包含的信息来识别用户。User-Agent、Accept-Language、Accept-Encoding 等头部值由浏览器自动发送,即使禁用 JavaScript 也能被收集。由于仅通过服务器端日志分析即可执行,用户极难察觉。

主动指纹通过执行 JavaScript 主动获取浏览器的详细环境信息。主要技术包括:

  • Canvas 指纹:在 HTML5 Canvas 上绘制文本和图形,逐像素读取结果并生成哈希。GPU、图形驱动和字体渲染引擎的差异导致相同绘图命令产生微妙不同的输出
  • AudioContext 指纹:使用 Web Audio API 生成振荡器节点并比较音频信号处理结果。音频栈实现的差异产生设备级唯一性。与 Canvas 结合可进一步提高识别精度
  • WebGL 指纹:获取 3D 图形渲染结果。GPU 厂商名、渲染器名、着色器精度和纹理处理结果因设备而异
  • 字体枚举:在 JavaScript 中创建指定各种字体名的元素,通过渲染宽度的变化推断已安装字体。操作系统和用户添加的字体组合具有很高的唯一性

结合这些技术的商业指纹库(如 FingerprintJS)声称识别精度超过 99%。

在欺诈检测中的合法应用

虽然指纹技术常在隐私侵犯的语境中被讨论,但它也有合法的安全用途。

异常登录检测可以识别来自与用户常用指纹不同环境的登录尝试,并要求额外认证。例如,如果一个通常从 Windows + Chrome 访问的账户突然收到来自 Linux + Firefox 的登录请求,可能表明存在撞库攻击,从而强制要求双因素认证

机器人检测可以识别自动化工具(Selenium、Puppeteer 等)生成的指纹特征。无头浏览器表现出与人类浏览器不同的模式,如 navigator.webdriver 属性为 true 或 Canvas 渲染结果一致。这被用于阻止电商网站的抢购机器人和票务转售机器人。

账户安全方面的应用包括:检测来自同一指纹的大量账户创建为欺诈注册,以及将指纹的突然变化标记为账户被盗的征兆。在网上银行中,指纹信息被纳入交易风险评分,高风险交易会被暂时搁置审查。

常见误解

隐身模式(无痕浏览)可以防止指纹追踪
隐身模式只是不保存浏览历史和 Cookie,浏览器的环境信息与正常模式完全相同。它无法防御指纹追踪。
使用 VPN 也能防止指纹追踪
VPN 隐藏的是 IP 地址,不会影响浏览器的环境信息。防御指纹追踪需要在浏览器端另行配置。

Cookie 追踪与指纹追踪的区别

Cookie 追踪

通过在浏览器中存储数据进行追踪。用户可以删除或阻止。GDPR 等法规要求获得同意。

浏览器指纹

利用环境信息进行追踪,不在浏览器中存储任何内容。用户难以察觉或删除。较难受到法规约束。

分享

相关术语