WebGL 指纹识别的工作原理
网站会运行 JavaScript,通常在隐藏的画布中创建 WebGL 上下文。脚本可以检查多种与图形有关的信号:
- GPU 信息: 浏览器允许时,可获取供应商和渲染器名称。
- WebGL 功能: 支持的扩展、纹理限制和可用功能。
- 着色器行为: 支持的精度级别和图形管线差异。
- 渲染像素: GPU、驱动程序、浏览器和操作系统造成的细微差异。
网站会把这些值组合成哈希或特征档案。该档案会成为更完整的浏览器指纹的一部分,可用于数据分析、欺诈检查和机器人检测,但不能作为个人身份的证明。
WebGL 指纹识别与 Canvas 指纹识别
两种方法都会渲染图形并检查结果,但使用的浏览器图形系统不同。
| WebGL 指纹识别 | Canvas 指纹识别 | |
|---|---|---|
| 图形系统 | 2D 和 3D,通常使用硬件加速 | 主要使用 Canvas 2D |
| 主要信号 | GPU、驱动程序、着色器和扩展 | 字体、文本渲染和光栅化 |
| 硬件影响 | 通常更明显 | 通常更间接 |
网站通常会把 WebGL 与 Canvas 指纹识别及其他信号结合使用,而不是只依赖其中一种方法。
代理为什么不会改变 WebGL 指纹
代理会改变网站看到的来源 IP 地址,但不会改变 GPU、图形驱动程序或 WebGL 输出。因此,即使请求使用不同的代理 IP,只要呈现相同的图形指纹,网站仍可能把这些请求关联起来。
反过来也可能引起注意。如果同一浏览器会话始终使用相同的 Cookie 和标头,图形特征却反复变化,这些信号就无法构成一致的客户端特征。仅轮换 IP 并不能让不同请求看起来像来自不同设备。
隐私与负责任的测试
清除 Cookie 不会重置图形硬件特征。无痕浏览也可能暴露许多相同的 WebGL 值。注重隐私的浏览器可以减少或标准化这些信号;禁用 WebGL 则会阻止直接测量,但可能导致图形内容较多的网站无法正常使用。
如果运营网站,应按要求披露指纹识别行为,只保留必要的数据,并把匹配结果视为风险信号,而不是身份依据。测试或采集公开数据时,应使用受支持的浏览器、保持配置一致,并遵守网站条款、访问控制和请求限制。
常见问题
WebGL 指纹是唯一的吗?
不是。多台设备可能产生相同的指纹;浏览器、操作系统或图形驱动程序更新后,同一台设备的结果也可能改变。
代理能隐藏 WebGL 指纹吗?
不能。代理会替换网站看到的 IP 地址,但 JavaScript 仍会在浏览器中运行,并可读取浏览器的 WebGL 特征。
不使用 Cookie 也能进行 WebGL 指纹识别吗?
可以。无需存储 Cookie 也能生成用于识别的信号,但匹配结果只是概率判断,软硬件发生变化后,可靠性可能降低。