什么是 WebGL 指纹识别?

WebGL 指纹识别 这是一种浏览器识别方法,它通过读取 WebGL API 中的 GPU 级详细信息来构建近乎唯一的设备签名。该方法综合考虑了显卡厂商字符串、完整的驱动程序渲染器字符串以及渲染出的 3D 场景的像素输出。收集这些值均无需用户授权。

WebGL 指纹识别是如何工作的?

页面加载时,JavaScript 会向 WebGL 上下文查询两个扩展参数:UNMASKED_VENDOR_WEBGL 以及UNMASKED_RENDERER_WEBGL. 这些会返回 GPU 厂商信息以及完整的渲染器字符串,其中包括显卡型号、驱动程序版本和渲染后端。 在配备 NVIDIA 显卡的 Windows 计算机上,该字符串可能显示为“ANGLE (NVIDIA, NVIDIA GeForce RTX 4070 Direct3D11 vs_5_0 ps_5_0, D3D11)”(BrowserLeaks - WebGL 指纹测试, 2025)。

除了驱动程序字符串之外,脚本还可以渲染一个隐藏的 3D 场景,并读取生成的像素输出。不同的 GPU 硬件和驱动程序版本会产生略有不同的光栅化结果,因此像素哈希为数据增添了另一层熵。这两类信号结合起来,即使在清除 Cookie 之后,也能在不同会话中识别出同一台设备。

追踪和反欺诈系统将 WebGL 数据作为更广泛的指纹识别技术栈中的一个输入源。它与画布和音频指纹识别天然契合,因为这三种信号均来自依赖硬件的渲染管道,因此更难被持续伪造。

常见问题解答

不。WebGL 的数值来源于 GPU 硬件和驱动程序的详细信息,而非浏览器中存储的数据。清除 Cookie 不会影响显卡向浏览器报告的数据。

仅凭渲染器字符串,通常就足以将设备锁定为特定的型号和驱动程序版本。大多数追踪系统会将其与画布、音频和字体信号结合使用,从而在更广泛的用户群体中实现更高的准确性。

机器人检测系统会将 WebGL 渲染器字符串与已知的无头浏览器配置文件进行比对。无头环境通常会报告通用或不一致的 GPU 字符串,这会触发风险警报,并可能引发额外的验证步骤。