浏览器指纹识别技术通过浏览器的配置来识别和追踪您的浏览器,而不是通过您设备上存储的任何信息。即使清除或阻止了 Cookie,它仍然有效。对于用户而言,这构成了一个持续的隐私问题;对于运行自动化流程的开发者而言,这构成了一个访问障碍。本文将介绍其工作原理、相关技术、网站使用它的原因以及如何降低自身受到的影响。

浏览器指纹识别的工作原理

抛开神秘感,这其实是一个非常基本的四步循环,每次出现都要重复执行:

  • 收集信息。一个脚本在你的浏览器中运行,并向一系列 API 请求描述自身信息:字体、GPU、屏幕分辨率等等。同时,服务器会读取 HTTP 标头中的信息:用户代理、语言、时区等等。没有人进行任何黑客攻击;这里的一切都是你的浏览器原本就会返回的信息。
  • 哈希值。所有这些单独的答案都会被合并成一个标识符,并存储在服务器端。时区和屏幕分辨率之间毫无关联,但这都无关紧要;它们最终都会被放入同一个“搅拌机”中。
  • 比较一下。下次你访问时,整个过程会从头开始重新运行,生成新的哈希值,网站会将其与存储中已有的哈希值进行比较。
  • 识别结果非常接近,网站将本次访问与您上次访问关联起来。整个关联过程中没有使用任何 Cookie。

有一点值得注意:你的指纹并非一成不变。浏览器会更新,字体也会添加或移除,而一个优秀的指纹识别系统会考虑到这些变化。它的设计理念是容忍一定的偏差,而不是每次都要求像素级的精准匹配;否则,一旦你更新了浏览器,它就会立即丢失你的信息,那就失去了指纹识别的意义。

值得注意的是,被动信号是指网站无需任何操作就能获取的信息。虽然最终目标相同,但网站需要付出的努力却截然不同,而这正是原因所在。 TLS指纹识别它被视为一个独立的事物,而不仅仅是浏览器指纹列表中的另一个项目。

浏览器指纹识别技术

不同的技术会触及浏览器的不同部分,但它们都在追求同一件事:找到你设置中一些其他人不具备的特定信息。

Canvas指纹识别

页面会悄悄地请求浏览器在一个隐藏的画布元素上绘制一些文本或形状,你根本看不到这些内容。最终的绘制效果,精确到单个像素,取决于你的显卡、驱动程序以及系统渲染字体的方式,因此两台不同的机器很少会生成完全相同的输出结果。

WebGL指纹识别

和 Canvas 的原理一样,只是目标渲染对象是 3D 而不是 2D。该页面通过 WebGL 让浏览器渲染内容,而渲染结果会在此过程中暴露你的图形硬件和驱动程序特性。

AudioContext 指纹识别

这个程序使用 Web Audio API 在内部处理信号,不涉及扬声器,不会播放任何声音,即使音量调到最大也听不到。但是,由于不同机器的音频堆栈处理信号的方式略有不同,最终的输出结果也会略有差异,而这种差异就成为了程序的标识。它悄无声息地发挥着作用,可以说是名副其实的“悄无声息”。

字体枚举

网站可以通过测量渲染文本所占的空间来确定你安装了哪些字体,因为即使可见文本看起来相同,字体替换也会改变这些测量值。你安装的字体列表往往会记录你的操作系统、语言区域以及你多年来安装的所有软件,这使得它本身就成了一个相当个性化的指纹。

平台、语言、插件列表、硬件并发性、设备内存——这些单独来看意义不大。很多人都在使用你的平台,很多人都在使用你的语言。但如果把它们综合起来,它们就能像其他信号一样,缩小选择范围。

有趣的地方在于其不一致性。当这些值相互矛盾时,例如插件列表与声称的浏览器不符,这正是机器人检测系统所依赖的较为可靠的信号之一。

时区、区域设置和屏幕信号

时区偏移、屏幕分辨率、色彩深度、设备是否支持触控——这些参数本身都很普通。但它们在检测中发挥作用的地方在于不匹配:时区与 IP 地址的地理位置不一致是一个常见的线索,而且网站也很容易自动检查这一点。

网站为何使用浏览器指纹识别

并非所有使用指纹识别技术的网站都是为了追踪你的一举一动来赚取广告费。实际情况千差万别,如果假装情况并非如此,最终只会导致出现一些含糊不清的隐私恐慌文章。

  • 防范欺诈和保障账户安全。指纹识别技术可以标记来自从未登录过您账户的设备进行的登录,拦截账户盗用企图,并用于支付欺诈筛查。如果您的银行曾经要求您在新笔记本电脑上完成额外的验证步骤,那就是这项技术。
  • 机器人和自动化检测。无头浏览器和自动化框架往往会通过指纹异常、字体缺失、WebGL 输出不像真实 GPU 输出、插件列表不匹配等方式暴露自身。这是现代技术的重要组成部分。反机器人系统工作,而且当你自己操作自动化程序而不是防御它时,它就会变成一个问题。
  • 广告和分析领域。指纹识别技术正是在这里招致了恶名。它是一种跨网站追踪技术,即使用户屏蔽或清除了 cookie 后,追踪仍然有效,这正是人们感到不安的根源所在。
  • 内容和访问控制。付费墙强制执行、地理限制、抓到有人在同一设备上运行五个免费试用账户。这些应用场景虽然不如反欺诈或广告追踪那样引人注目,但却无处不在。

​所有这些操作都使用同一个信号。指纹识别系统会标记被盗信用卡,也会标记你的合法信用卡。 价格监控脚本它们在后台运行着完全相同的检查。技术本身并不关心你究竟是哪一方;它只知道你的指纹与真实用户浏览器的正常指纹不符。这并非系统缺陷;只是当一个工具被用于解决两个截然不同的问题时,就会出现这种情况。

浏览器指纹识别和网络自动化

启动一个默认的无头浏览器,它几乎会立即暴露自身,通常无需你进行任何故意操作。`navigator.webdriver` 设置为 `true`,这相当于在发出警告。WebGL 和 canvas 的输出经常缺失或不一致,因为没有真正的 GPU 驱动程序像在实际机器上那样进行渲染。任何正常桌面系统都会安装的字体都不存在。插件列表与该浏览器实际安装的插件列表不符。这些单独来看都不像“机器人”,但综合起来就很容易判断是机器人了。

真正的故障模式是矛盾,而非缺失。一个带有 Windows 用户代理和 Linux 字体指标的指纹比一个纯粹的无头浏览器指纹更容易被检测到。同样的道理也适用于使用德国 IP 地址但时区却是美国的指纹。检测系统寻找的不是“这个指纹看起来像是自动生成的”,而是“这个指纹不匹配”。这意味着简单的欺骗通常只会让情况更糟,而不是更好。你修补了一个属性,却让其他十个属性发出警报,表明出了问题。

​这也是为什么单靠代理无法解决这个问题的原因。即使你每次请求都发送相同的指纹,却不断轮换 IP 地址,这种做法也很容易被识破——IP 地址变了,其他一切都没变,而这种不匹配正是模式检测系统所要识别的。如果目标是将你的指纹地理位置与你的流量实际来源地进行匹配,那么住宅代理指纹之间需要相互匹配,而不仅仅是共存。

实际配置时,可选择 IPFoxy 等住宅代理,并根据目标地区匹配 IP、时区和浏览器环境。先完成小规模测试,确认环境一致后再进行自动化任务。

​一个协调一致的系统不会着重于解决出现的问题,而是更像一个从一开始就为此而构建的浏览器。 伪装狐狸接近它:一致的指纹配置文件、地理位置和区域设置,这些信息与背后的 IP 地址完全一致,而不是像普通的无头浏览器那样伪装成真实身份。对于运行更激进的基于指纹的拦截策略的目标来说,这通常是透明处理的关键所在。 网站解除屏蔽总比自己尝试绕过检测要好。

如何测试浏览器指纹

指纹识别测试不会告诉你“是”或“否”。它会告诉你,你的设置与一大堆其他人的浏览器相比有多么不同寻常,以及哪些具体属性造成了最大的影响。

​一些公开测试者对此进行了很好的探讨,但各自的结论却不尽相同:

  • AmIUnique它会给出一个简单的独特性评分,并详细分析哪些属性对该评分贡献最大。
  • EFF掩盖你的踪迹从隐私和追踪的角度来分析问题,如果你想了解广告商具体能从你身上获取哪些信息,这将非常有用。
  • CreepJS更深入地进行一致性检查,不仅检查指纹包含的内容,还检查指纹是否能够真正保持完整。

总结

浏览器指纹识别技术会监控您的浏览器行为,而不是在您的计算机上存储任何信息,因此清除 cookie 或使用隐身模式都无法对其进行保护。对于日常隐私而言,这意味着融入人群比试图从人群中消失更重要。对于自动化而言,这意味着完整的指纹比经过修补以使其看起来正常的指纹更有价值,因为检测系统寻找的是矛盾之处,而不是缺失的部分。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐