WebGL 指纹是网站可以通过 WebGL API 收集的一组图形信号。 这些信号可能包括 GPU 供应商和渲染器、支持的功能、着色器精度以及渲染场景的像素输出。 网站可以将它们组合或散列作为更广泛的 浏览器指纹 的一部分。
结果可以帮助区分一种浏览器环境与另一种浏览器环境。 它不是 GPU 序列号。 它本身也不能识别一个人。
什么是 WebGL 指纹识别?
WebGL 是用于硬件加速图形的浏览器 API。 它为 3D 地图、浏览器游戏、设计工具、产品预览和数据可视化提供支持。 大部分工作都是通过设备 GPU 进行的。
相同的 API 还公开有关图形环境的详细信息。 页面可以检查哪些 WebGL 功能可用。 它可以读取报告的图形供应商和渲染器。 它还可以要求浏览器绘制固定场景,然后检查返回的像素。
这些结果不仅仅取决于显卡。 驱动程序、操作系统、浏览器、图形转换层和浏览器设置都会影响它们。 这种组合使得 WebGL 对于指纹识别非常有用。
WebGL 仍然只是信息来源之一。 真正的指纹识别系统还可能考虑用户代理、屏幕尺寸、字体、Canvas 输出、时区、语言和其他浏览器属性。
WebGL 指纹识别如何工作?
基本的 WebGL 指纹检查分为四个步骤:
- 该页面创建 WebGL 或 WebGL 2 上下文。
- 它查询图形元数据和支持的功能。
- 它可以渲染固定图像或运行一组着色器。
- 它收集值并将其中一些值转换为哈希值。
第一组结果来自报告值。 这些可能包括 WebGL 供应商、渲染器、支持的扩展、纹理限制和着色器精度。
某些浏览器还通过 WEBGL_debug_renderer_info 扩展公开未屏蔽的供应商和渲染器值。 这些字段可以显示 GPU 系列或浏览器使用的图形层。 隐私设置可能会限制它们,因此它们并非在每个浏览器环境中都可用。
第二组来自实际渲染。 该页面为每个浏览器提供相同的图形任务。 像素值可能会出现微小差异,因为 GPU 和驱动程序并不总是以完全相同的方式处理着色器。 该页面可以读取输出并计算图像哈希值。
哈希值比完整图像或长功能报告更容易比较。 它不是通用标识符。 每个测试可以使用不同的场景、不同的参数组和不同的哈希方法。
WebGL 指纹揭示了什么?
WebGL 报告可以详细描述图形环境。 每个字段的含义都有限制。
| 信号 | 它可能表明什么 | 它没有证明什么 |
|---|---|---|
| 供应商和渲染器 | GPU 系列或图形实现 | 设备所有者的身份 |
| 未遮罩的渲染器 | 更具体的 GPU 或驱动程序信息 | 独特的物理显卡 |
| 支持的扩展 | WebGL 实现中可用的功能 | 两个匹配的浏览器是同一设备 |
| 纹理和渲染限制 | 通用硬件及实施能力 | 精确的设备性能 |
| 着色器精度 | 图形堆栈如何处理数字格式 | 永久标识符 |
| 图像哈希 | 一个定义的渲染任务的输出 | 将在每个测试站点上匹配的哈希值 |
最有用的信号通常是字段之间的关系。 报告的操作系统、浏览器版本、GPU 渲染器和扩展集应该一起有意义。 一个不寻常的字段可能意义不大。 几个相互冲突的字段值得仔细研究。
这就是为什么 WebGL 可以出现在 Bot 检测 和欺诈检查中。 系统可以将图形数据与其他浏览器和设备信号进行比较。 它不应该将一个 WebGL 值视为访问者是自动化的证据。
WebGL 指纹是否唯一?
WebGL 指纹可以缩小浏览器组的范围,但“独特”这个词往往过于强烈。
许多设备使用相同的集成 GPU、驱动程序分支、操作系统和浏览器引擎。 他们报告的元数据可能匹配。 它们的渲染输出也可能匹配。 当与其他信号结合时,通用结果仍然可以添加有用的信息,但它本身并不能识别一个物理设备。
反之亦然。 两个不同的哈希值并不总是意味着两个不同的设备。 一台设备可以在软件或配置更改后产生新的结果。
WebGL 指纹可能会在以下情况后发生变化:
- 显卡驱动程序更新
- 浏览器更新
- 操作系统更新
- 硬件加速的改变
- 集成显卡和专用显卡之间的切换
- 迁移到虚拟机或远程桌面
- 浏览器隐私设置的更改
- 测试脚本的更改
稳定性应该根据具体情况来判断。 在得出结论之前,在相同的浏览器配置文件中重复相同的测试。
Canvas 与 WebGL 指纹识别
Canvas 和 WebGL 指纹识别相关,但它们不是同一种技术。
| 区域 | Canvas 指纹 | WebGL 指纹识别 |
|---|---|---|
| 主要背景 | 画布 2D | WebGL 或 WebGL 2 |
| 典型任务 | 绘制文本、形状、颜色和效果 | 渲染图形或运行着色器 |
| 共同影响 | 字体、文本光栅化、浏览器、操作系统 | GPU、驱动程序、图形堆栈、浏览器、操作系统 |
| 共同结果 | 画布图像哈希 | WebGL 报告哈希或图像哈希 |
| 额外数据 | 2D 渲染行为 | 供应商、渲染器、扩展、限制、着色器精度 |
WebGL 通常渲染为 HTML 画布元素。 这个共享元素会引起一些混乱。 重要的区别在于渲染上下文和通过它提供的信息。 Canvas 2D 检查通常侧重于文本和 2D 绘图。 WebGL 检查可以更深入地了解图形实现。
指纹识别系统可以收集两者。 匹配 Canvas 和 WebGL 数据可以增加信心。 当报告的浏览器环境不支持该组合时,不匹配也可能会很突出。
网站如何使用 WebGL 指纹
WebGL 数据具有合法且隐私敏感的用途。
图形应用程序可以在选择渲染路径之前检查功能。 站点可以避免浏览器无法很好处理的效果。 开发人员还可以使用渲染器信息来调查图形错误。
安全系统可以使用相同的数据作为风险评估的一部分。 重复的图形信号可以帮助识别返回的环境。 不一致的值可以帮助识别异常的自动化或虚拟化。 这些检查通常与请求标头、浏览器属性、网络数据、帐户历史记录和行为相结合。
广告和分析脚本还可以使用 WebGL 数据进行跟踪。 与 cookie 不同,信号来自浏览器和图形环境。 清除站点存储不会直接更改 GPU、驱动程序或渲染行为。
WebGL 代码的存在并不能证明网站正在跟踪访问者。 3D 查看器需要 WebGL 才能工作。 周围的脚本行为和收集的字段很重要。
如何测试您的 WebGL 指纹
BrowserLeaks IP 和指纹测试 可以显示页面从当前浏览器读取的内容。 其 WebGL 报告包括支持状态、上下文详细信息、功能值、供应商信息和渲染哈希。
首先检查这些字段:
- WebGL 和 WebGL 2 支持
- 供应商和渲染器
- 未屏蔽的供应商和渲染器
- WebGL 报告哈希
- WebGL 图像哈希
- 支持的扩展
报告哈希通常总结了一组参数。 图像哈希表示渲染任务的输出。 它们回答不同的问题,因此不要将它们视为可以互换的。
在一个配置文件中运行相同的测试两次。 如果没有任何变化,这些值通常应保持稳定。 然后在浏览器、驱动程序或操作系统更新之前记录结果。 稍后的比较可以显示哪些字段已移动。
不要比较来自不相关测试站点的哈希值,就好像它们来自一个标准一样。 这些站点可能会渲染不同的场景或收集不同的参数。 比较同类。
测试页是可见性报告,而不是通过或失败证书。 通用 GPU 值并不自动安全。 稀有的价值并不一定是危险的。 完整的浏览器环境比一个徽章或哈希更重要。
VPN 或代理是否会更改 WebGL 指纹?
VPN 或代理会更改网络路径和可见的IP地址。 它通常不会更改 GPU、图形驱动程序或 WebGL 渲染输出。
在查看浏览器配置文件时,此边界很重要。 干净的代理连接表明网络路由正在工作。 它没有提及浏览器公开的图形信号。 单独的 WebRTC 泄露 测试会检查浏览器连接候选者。 WebGL 测试检查不同的层。
更改 IP 同时保持相同的 WebGL 值是正常的。 这两个信号描述了环境的不同部分。 系统仍可能将它们与声明的位置、操作系统、设备类型和过去的活动进行比较。
隐身模式是否会阻止 WebGL 指纹识别?
隐身模式创建临时浏览会话。 它限制窗口关闭后保留的本地历史记录和站点数据。 它不会取代图形硬件或驱动程序。
浏览器可以在普通窗口和私有窗口中公开相同的 WebGL 供应商、渲染器、功能和渲染输出。 浏览器特定的隐私保护可以改变这种行为,但单独的隐私模式并不是一般的 WebGL 防御。
清除cookies也有同样的限制。 它删除存储的标识符。 它不会直接改变浏览器和设备特性。
如何减少 WebGL 指纹识别
没有任何单一设置可以无需权衡即可消除所有指纹信号。 实用选项控制暴露的数据量及其保持的稳定性。
- 使用具有内置指纹识别保护的浏览器。 它可能会减少详细的渲染器数据或使值在站点之间的用处降低。
- 在不需要 WebGL 的网站上阻止它。 这可以阻止这些页面运行 WebGL 检查,但也可能会破坏有用的内容。
- 在浏览器级别禁用 WebGL。 这样影响范围最广,兼容性成本也最高。
- 标准化或屏蔽选定的值。 报告的GPU数据仍然需要与操作系统、浏览器、WebGPU和其他图形信号一致。
- 向渲染输出添加受控噪声。 每次读取时的随机输出可能会造成不稳定。 稳定的配置文件级别处理通常更容易推理。
单独更改一个字段可能会降低浏览器环境的连贯性。 例如,Windows 用户代理旁边的 Apple GPU 渲染器需要解释。 阻止每个图形 API 还会使浏览器变得不那么典型,并禁用依赖于硬件加速渲染的应用程序。
目标不应该是每次页面加载时都有不同的哈希值。 有用的浏览器配置文件需要配置文件内具有合理的稳定性以及其信号之间的合理关系。
WebGL 指纹常见问题解答
WebGL 指纹是 GPU 序列号吗?
不。 WebGL 可以公开供应商、渲染器、支持的功能和渲染行为。 这些值可以描述 GPU 系列和图形环境。 它们不会透露物理 GPU 序列号。
两个设备可以具有相同的 WebGL 指纹吗?
是的。 具有相似 GPU、驱动程序、操作系统和浏览器的设备可以返回相同的元数据或渲染哈希。 当 WebGL 与其他浏览器和设备信号结合使用时,它对于识别会变得更加有用。
为什么我的 WebGL 哈希值发生了变化?
驱动程序、浏览器、操作系统、GPU 选择、硬件加速设置、隐私功能或测试脚本可能已更改。 在假设设备身份发生更改之前,在同一配置文件中重复相同的测试并检查周围的字段。
清除 Cookie 是否会更改 WebGL 指纹?
不,不是单独的。 Cookie 是存储的网站数据。 WebGL 指纹来自图形元数据、功能和渲染输出。 站点可以使用这两种类型的信息,但清除其中一种信息不会重置另一种信息。
我应该禁用 WebGL 吗?
只有当隐私利益值得牺牲浏览器功能时。 禁用 WebGL 可能会影响地图、游戏、设计工具、可视化和其他图形密集的页面。 浏览器级指纹识别保护可以为日常使用提供更好的平衡。
WebGL 指纹识别与浏览器指纹相同吗?
不。 WebGL 指纹识别是浏览器指纹的一部分。 更广泛的指纹可能包括用户代理、屏幕、字体、时区、语言、Canvas 输出、音频行为和其他信号。
要点
WebGL 指纹描述的是图形环境,而不是人。 它的价值来自于多个信号的协同作用。 供应商数据、功能限制、着色器行为和渲染哈希各自显示图片的不同部分。
在判断一个哈希之前,请阅读完整的报告。 将网络测试与图形测试分开。 最重要的是,在整个浏览器环境中寻找合理的稳定性和一致性。 与追求看似独特的结果相比,这为您提供了更多有用的信息。

ZH
