什么是画布指纹识别?
Canvas 指纹识别 是一种浏览器追踪技术,它会在 HTML5 页面上绘制隐藏的图形<canvas> 该组件会读取生成的像素数据,并将其哈希转换为一个稳定的设备标识符。由于GPU、驱动程序、操作系统和字体渲染器在执行相同的绘制指令时,生成的像素会存在细微差异,因此该哈希值在每台设备上几乎都是唯一的。 该过程不涉及任何 Cookie,也不会将任何数据存储在用户设备上,这也正是其难以被检测或清除的原因。
Canvas 指纹识别的工作原理
一个脚本将文本和图形绘制到一个隐藏的 HTML5 元素上<canvas>,然后调用 Canvas API 的toDataURL() 将像素数据作为 Base64 图像读取回来,并对其进行哈希运算。由于各设备在 GPU、驱动程序、操作系统、字体渲染和抗锯齿方面存在细微差异,因此生成的哈希值成为一个稳定的标识符(维基百科 - Canvas 指纹识别(2025年)。整个操作在浏览器中静默运行,无需用户任何操作。
渲染出的像素会有所不同,因为图形渲染堆栈中的每一层——从显卡固件到操作系统的合成引擎——都会应用各自的舍入和混合规则。 即使两台设备的硬件完全相同,只要驱动程序版本不同,仍可能产生不同的输出结果。这使得画布指纹识别比 Cookie 更具持久性:清除浏览器存储对驱动输出的底层硬件特性没有任何影响。
使用场景
机器人检测与欺诈防范。 反机器人平台会在其信号集 中纳入画布指纹识别技术,以区分真实浏览器与无头自动化工具及模拟环境。无头浏览器生成的画布哈希值通常与其声称的用户代理字符串不一致,这会使该请求被标记为可疑。
广告欺诈和无效流量检测。 广告验证服务商利用画布指纹技术,即使IP地址在轮换的情况下,也能识别出跨多个虚假展示的同一台设备。这有助于广告主在设备层面(而非仅在网络层面)检测无效流量。
用于网络数据采集的真实浏览器环境。 从受反机器人保护的网站收集数据的开发者,需要其浏览器环境生成与真实消费者设备一致的画布哈希值。通过家庭代理网络转发请求——该网络中的流量运行在配备真实 GPU 和驱动程序栈的真实消费者硬件上——能够产生真实的指纹信号,而非服务器端无头实例中常见的统一输出结果。
常见问题解答
Canvas 指纹识别主要用于在不依赖 Cookie 的情况下进行跨站用户追踪、检测机器人和模拟浏览器,以及在设备层面防范欺诈。反机器人系统通常将其与其他数十种信号结合起来,以构建可信度评分。
一些注重隐私的浏览器和扩展程序会屏蔽或对 canvas 输出进行随机化处理,以防止指纹识别。然而,过度激进的随机化处理本身可能会被机器人检测系统视为异常,因为真实的浏览器在同一设备上多次访问时,生成的哈希值是保持一致的。
Cookie 是存储在设备上的文件,用户可以将其删除。Canvas 指纹识别技术是根据硬件和软件特征生成标识符的,因此清除 Cookie、切换到隐身模式或使用其他浏览器配置文件,都不会改变 GPU 和驱动程序生成的底层哈希值。
两者均利用浏览器的图形处理管道,但 WebGL 指纹识别直接通过 GPU 渲染 3D 场景,而 Canvas 指纹识别则采用 2D 绘图指令。它们是互补的信号,反机器人和分析系统通常将二者结合使用,以增强设备识别能力。