WebGL 是一种浏览器技术,允许网站通过设备的 GPU 渲染 2D 和 3D 图形。但同样是基于 GPU 的渲染过程,也可能泄露硬件、驱动程序和渲染细节,网站利用这些信息构建 WebGL 指纹,从而跨会话识别您的浏览器。用户可以通过禁用 WebGL、使用专注于隐私的浏览器扩展,或使用指纹浏览器来欺骗和隔离浏览器指纹,从而降低 WebGL 追踪风险。
快速解答
- WebGL 是一个 JavaScript API,用于在浏览器中无需插件即可渲染交互式图形。当网站读取与 GPU 相关的信号、渲染输出、WebGL 扩展和像素级差异来识别浏览器环境时,就会产生 WebGL 指纹。
- WebGL 指纹常用于广告、欺诈检测、多账号风险控制、设备验证和性能优化。
- 您可以通过禁用 WebGL、使用隐私扩展程序或使用像 FlashID 这样的指纹浏览器在一致的浏览器配置文件中管理 WebGL 参数,从而减少 WebGL 追踪。
- 对于业务工作流,禁用 WebGL 通常过于激进。指纹浏览器通常更实用,因为它可以同时控制 WebGL、Canvas、GPU、代理、时区、User-Agent 和配置文件持久性。
什么是 WebGL 以及什么是 WebGL 指纹
WebGL,全称 Web Graphics Library(网页图形库),是一个 JavaScript API,允许兼容的浏览器通过 HTML
隐私问题始于使 WebGL 强大的同一个特性:它与图形堆栈通信。当网站向浏览器请求 WebGL 上下文时,浏览器可能会暴露与显卡、驱动程序、渲染管线、着色器行为、纹理支持、抗锯齿和支持的扩展相关的信息。不同的设备和浏览器渲染相同的 WebGL 场景可能会有细微差别。这些微小的差异可以转化为指纹。
WebGL 指纹不仅仅是一个字段,它通常是多个信号的组合,包括 GPU 厂商(Vendor)、渲染器字符串(Renderer)、WebGL 版本、WebGL2 支持情况、支持的扩展、着色器精度、绘图缓冲属性、纹理限制、像素输出和图像哈希值。

这就是为什么 WebGL 在浏览器指纹识别中非常重要。Cookie 可以被删除,IP 地址可以改变,登录会话可以过期。但与 GPU 相关的渲染模式在跨会话时可以保持相对稳定。网站不需要知道您的真名就可以识别出“这个浏览器环境看起来和之前的设备是一样的”。
WebGL 指纹识别的常见商业应用场景
WebGL 指纹不仅被“追踪公司”使用,它已成为现代风险评分、个性化、广告和账号安全系统的一部分。
跨站追踪
如果多个网站或第三方脚本收集类似的 WebGL 信号,即使在清除 Cookie 后,它们也可以在不同的域名下识别出同一个浏览器。这使得 WebGL 指纹对于 长期受众画像 和 跨站归因 非常有价值。
广告与再营销
广告平台可能会将 WebGL 信号作为更大范围设备指纹的一部分,以 识别回访者、细分受众、防止重复归因 并 提高再营销准确性。用户可能离开网站,清除 Cookie,并从不同的 IP 返回,但 WebGL 指纹可能看起来依然熟悉。
欺诈检测与多账号关联
电子商务、金融科技、票务、游戏和社交平台通常需要 检测可疑的账号集群。如果许多账号从不同的 IP 地址登录,但共享相同或高度相似的 WebGL、Canvas、屏幕、时区和设备信号,平台可能会将其视为关联环境。
账号验证与访问控制
一些高安全性系统可能会使用设备指纹作为登录验证的辅助信号。熟悉的 WebGL 配置文件可以减少摩擦,而 IP、设备类型、GPU 和浏览器配置文件之间的突然不匹配可能会触发额外的检查。
用户体验与性能调节
WebGL 数据并不总是用于追踪。它还可以帮助网站根据设备能力 调整图形质量、纹理大小、动画强度 和 渲染模式。例如,3D 设计工具可能会向低端集成显卡交付较轻的场景,向高性能显卡交付更高级的场景。
业务运营与环境质量控制
对于代理机构、跨境电商团队、联盟营销人员和社交媒体团队,WebGL 是运营风险的一部分。一个声称是 macOS 设备但暴露了不兼容的 Windows GPU 字符串的配置文件看起来会很异常。使用美国代理但暴露出的语言、时区和 GPU 模式与目标市场不匹配的配置文件也可能降低信任度。
Canvas 指纹 vs WebGL 指纹:有什么区别?
Canvas 和 WebGL 相关,因为它们都使用浏览器的绘图能力,但它们并不相同。
可以将 Canvas 指纹想象成要求您的浏览器在纸上画一张扁平的画。网站可能会绘制文本、形状、颜色和线条,然后测量最终生成的像素。字体、抗锯齿、操作系统渲染、浏览器引擎和图形设置的微小差异都会创建一个独特的 2D 绘图结果。
现在将 WebGL 指纹想象成要求您的设备构建并照亮一个小型的 3D 模型。网站不仅仅检查平面图像,还可以观察 GPU 行为、着色器精度、纹理处理、3D 渲染限制、扩展支持以及经过更复杂渲染过程后的像素输出。
从实际角度来看:
- Canvas 指纹更侧重于 2D 渲染输出、字体、文本平滑和像素差异。
- WebGL 指纹更侧重于 GPU 相关数据、WebGL 厂商、渲染器、着色器行为、扩展列表、纹理限制及 3D 渲染差异。
- Canvas 较容易理解,但 WebGL 可以暴露更深层的硬件和驱动层面的线索。
- 现代检测系统通常会对比这两者。 如果 Canvas 指向一类设备而 WebGL 指向另一类,该配置文件可能看起来像是被伪造的或不稳定的。
网站如何收集用户的 WebGL 指纹
WebGL 指纹收集通常在后台静默进行。普通用户可能看不到任何弹窗、权限请求或可见的 3D 物体。该过程通常内置在 JavaScript 代码中。
第 1 步:创建隐藏的绘图区域
首先,网站在浏览器内部创建一个小的绘图区域。这个区域通常对用户不可见,不需要以图像、动画或图形的形式出现在页面上。
网站利用这个隐藏区域来运行 WebGL 渲染测试。
第 2 步:请求浏览器启用 WebGL
接下来,网站请求浏览器启动 WebGL 渲染环境。这使页面能够检查是否支持 WebGL 以及浏览器是否可以执行基于 GPU 的渲染。
第 3 步:读取 WebGL 相关信息
一旦 WebGL 环境激活,网站就可以开始读取浏览器的图形相关信息。
在某些情况下,浏览器还可能暴露更详细的 GPU 相关值,这可以揭示有关显卡、图形驱动程序或渲染后端的线索。
第 4 步:渲染测试图像或场景
收集完基础 WebGL 信息后,网站可能会要求浏览器渲染一个预定义的图像、形状、纹理、渐变或简单的 3D 场景。
第 5 步:分析渲染结果
网站随后会检查最终的渲染输出。它可能会查看像素级差异、颜色值、纹理行为、阴影效果、抗锯齿和其他微小的视觉细节。
第 6 步:生成 WebGL 指纹哈希值
在收集完 WebGL 参数和渲染结果后,网站将数据转换为紧凑的指纹哈希值。
这个哈希值就像是该浏览器 WebGL 行为的简短 ID。网站不需要存储每一个原始细节,而是存储一个代表浏览器图形环境的计算结果。
第 7 步:将 WebGL 与其他浏览器信号对比
大多数网站不会仅依赖 WebGL。它们通常会将其与其他浏览器指纹信号进行对比。
如果信号一致,浏览器环境看起来就是正常的。但如果 WebGL 显示的信息与 User-Agent、操作系统、代理位置或屏幕尺寸显示的信息不符,环境可能看起来就很可疑。
第 8 步:存储并在以后识别浏览器
最后,网站可能会将 WebGL 指纹存储为更大范围设备配置文件的一部分。当同一个浏览器再次访问时,网站可以将新的指纹与之前的指纹进行比较。
如果 WebGL 哈希值和其他浏览器信号相似,网站可能会将其识别为同一个浏览器环境,即使清除了 Cookie 或更换了 IP 地址。
WebGL 指纹识别的安全性与隐私风险是什么?
WebGL 指纹识别带来了多种隐私和安全风险。
首先,它可以 静默发生,无需权限提示,因此用户可能意识不到自己的 GPU 和渲染细节正在被收集。
其次,它可以 实现超越 Cookie 的追踪;清除 Cookie、使用隐私模式或更改 IP 地址可能无法完全隐藏回访浏览器。
第三,如果多个账号共享类似的 WebGL、Canvas、GPU、时区和代理模式,它可能会 关联多个账号。
最后,存储的指纹数据如果被共享或泄露,可能成为另一种形式的用户画像。与密码或 Cookie 不同,真实的 GPU 特性无法被轻易重置。
如何防止 WebGL 指纹泄露
没有一种适用于所有人的完美方法。正确的方法取决于您是普通隐私用户、开发者、研究人员还是管理多个账号的业务团队。
方法 1:在浏览器中禁用 WebGL
最直接的方法是禁用 WebGL。这减少了基于 WebGL 的指纹识别,因为如果 WebGL 不可用,网站就无法收集正常的 WebGL 渲染数据。
如何在 Chrome 中禁用 WebGL
- 打开 Chrome,在地址栏输入 chrome://flags/ 并回车。
- 在搜索栏中输入 “WebGL”。
- 找到 “WebGL Draft Extensions” 并将其设置为 “Disabled”。
- 重启浏览器使更改生效。

如何在 Firefox 中禁用 WebGL
- 在地址栏输入 about:config。
- 接受警告。
- 搜索 webgl.disabled。
- 将其切换为 true。
- 根据需要重启浏览器。

禁用 WebGL 很简单,但并不总是实用。许多网站使用 WebGL 来展示地图、看板、在线游戏、设计工具、视频特效、虚拟体验和数据可视化。禁用它可能会导致功能损坏、性能下降,或让网站认为您的浏览器异常。对于业务用户来说,“WebGL 不可用”有时和“WebGL 暴露”一样可疑,因为大多数正常的现代浏览器都支持 WebGL。
方法 2:使用隐私保护扩展程序
隐私扩展程序可以通过阻止追踪器、限制脚本或更改 API 输出动态来减少指纹识别。
常见的例子包括:
Privacy Badger: 由电子前哨基金会(EFF)开发,Privacy Badger 能够根据行为自动学习阻止追踪器,而不仅仅依赖手动阻止列表。
NoScript: 一个默认阻止 JavaScript 和其他活动内容的浏览器扩展,仅允许来自受信任站点的脚本运行。
CanvasBlocker: 一个 Firefox 扩展,可以阻止或伪造指纹识别相关的 JavaScript API 输出,包括用于指纹识别的 API。其官方页面警告用户避免堆叠多个保护相同 API 的工具。

扩展程序对个人隐私很有用,但也有限制。首先,激进的阻止可能会导致网站崩溃。其次,扩展程序本身的配置也可能成为指纹的一部分。第三,某些扩展程序需要广泛的权限才能运行。第四,扩展程序通常运行在脚本阻止或 API 钩子层,可能无法在 WebGL、Canvas、WebRTC、User-Agent、时区、代理、屏幕、语言和设备内存之间提供完整、一致的身份。
对于日常浏览,扩展程序会有所帮助。对于多账号业务运营,它们通常不够。
方法 3:使用指纹浏览器
指纹浏览器并不仅仅是简单地阻止 WebGL,其目标是创建隔离、一致且真实的浏览器配置文件。
FlashID 指纹浏览器 旨在通过完整的配置文件管理浏览器指纹信号。如“创建配置文件”面板中所示,用户可以配置或查看地理位置、语言、WebGL 信息、WebGPU、硬件噪声、屏幕、字体、WebRTC、时区、系统和 User-Agent 等参数。
自定义 WebGL 元数据:用户可以为 WebGL 信息选择“真实”、“手动”或“随机”模式。在手动模式下,他们可以调整关键值,如 厂商 (Vendor) 和 渲染器 (Renderer),从而帮助掩盖设备的真实图形信息。
控制硬件噪声: FlashID 还支持 WebGL、Canvas、AudioContext、ClientRects 和 SpeechVoices 的噪声设置,帮助每个浏览器配置文件保持更受控且不易关联的指纹身份。

为了更好地理解 WebGL 保护是如何工作的,让我们对比 FlashID 中创建的三个浏览器配置文件。在此测试中,所有配置文件设置均保持一致,包括系统、浏览器类型、语言、屏幕和其他指纹参数。唯一改变的变量是 WebGL 信息 和 WebGL 硬件噪声。
创建每个配置文件后,我们打开了 BrowserLeaks WebGL 测试页面,并对比了两个关键结果:WebGL 报告哈希值 (WebGL Report Hash) 和 WebGL 图像哈希值 (WebGL Image Hash)。这一对比显示了一个重要的区别:更改 WebGL 元数据可以影响报告哈希值,而启用 WebGL 噪声可以影响实际的渲染图像哈希值。
配置文件 1: WebGL 信息设置为 真实值,WebGL 硬件噪声 已禁用,其他配置文件参数保持不变。


配置文件 2:WebGL 信息设置为 手动 并自定义了厂商和渲染器,WebGL 硬件噪声 已禁用,其他配置文件参数保持不变。


在配置文件 2 中,手动设置显卡厂商和渲染器更改了 WebGL 报告哈希值,这意味着网站现在看到的是自定义的 WebGL 元数据,而不是原始真实值。然而,WebGL 图像哈希值与配置文件 1 保持一致,这说明实际的渲染输出没有改变。换句话说,这种设置只修改了“汇报信息层”,而没有修改“渲染输出层”,因此它可能会绕过简单的厂商/渲染器检查,但仍可以通过 WebGL 图像哈希值被关联。
配置文件 3:WebGL 信息设置为 手动 且厂商和渲染器与配置文件 2 相同,WebGL 硬件噪声 已启用,其他配置文件参数保持不变。


在配置文件 3 中,WebGL 信息仍处于手动模式,厂商和渲染器与配置文件 2 相同,因此 WebGL 报告哈希值保持不变。然而,在启用 WebGL 硬件噪声后,WebGL 图像哈希值发生了变化。这表明 WebGL 噪声并不修改厂商或渲染器等元数据,而是改变了实际的渲染输出。与配置文件 2 相比,这种设置提供了更强大的保护,因为它同时掩盖了报告的 WebGL 元数据和真实的 WebGL 图像指纹。
结论
WebGL 非常有用,因为它赋予了网站强大的基于 GPU 的图形能力。WebGL 指纹识别具有风险,因为同样的渲染路径可以泄露在跨会话时保持稳定的设备级信号。禁用 WebGL 和使用隐私扩展可以减少暴露,但业务用户通常需要一致性,而不仅仅是屏蔽。像 FlashID 这样的指纹浏览器有助于将 WebGL 作为完整、真实的浏览器身份的一部分进行管理。
如果您希望随时了解实用的见解和行业趋势,欢迎加入我们的 社群。
常见问题
1. WebGL 指纹识别与 IP 追踪是一回事吗?
不是。IP 追踪识别的是您的网络地址,而 WebGL 指纹识别的是浏览器和 GPU 相关的特征。即使您的 IP 发生变化,WebGL 仍可能帮助网站识别出相似的浏览器环境。
2. 无痕模式能阻止 WebGL 指纹识别吗?
不能完全阻止。无痕模式主要在会话结束后限制本地存储、Cookie 和浏览历史。它不会自动移除 WebGL 厂商、渲染器、着色器行为或像素输出信号。
3. 为了隐私我应该禁用 WebGL 吗?
如果隐私是您的唯一优先级,并且您不需要使用基于 WebGL 的网站,您可以禁用它。但是,许多现代网站依赖 WebGL 运行地图、设计工具、游戏、看板和视觉效果。禁用 WebGL 也可能使您的浏览器看起来与众不同。
4. 在 WebGL 浏览器报告中我应该检查哪些内容?
检查 WebGL 支持、WebGL2 支持、厂商、渲染器、未加掩蔽的厂商、未加掩蔽的渲染器、支持的扩展、图像哈希值和报告哈希值。同时检查这些值是否与您的操作系统、User-Agent、代理位置和设备类型相匹配。
5. VPN 能防止 WebGL 指纹识别吗?
不能。VPN 改变的是您的网络路径和可见 IP 地址,但它不会自动改变 GPU 渲染行为。如果您的 IP 显示在一个地点,但浏览器指纹看起来不一致,环境可能仍会被视为可疑。
6. 指纹浏览器如何帮助实现 WebGL 指纹保护?
指纹浏览器(如 FlashID)可以将 WebGL 作为完整浏览器配置文件的一部分进行管理。它不只是禁用 WebGL,还可以帮助控制 WebGL 厂商、渲染器、扩展、像素输出、Canvas/GPU 一致性、代理匹配和配置持久性,使每个配置文件对于合法的多账号操作更加稳定且真实。
您可能还喜欢

