WebGL 检测可以读取网页能访问的图形接口信息。这些信息可能帮助区分环境,但不是经过验证的硬件清单,也不是隐私评分。看到「Masked」时,需要先理解检测读到了什么,不能直接判断为故障或防护成功。
打开浏览器指纹检测,查看 WebGL 相关结果。本文说明当前 BrowserCheck 代码和一套比较流程,不提供浏览器排名,也没有声称测量了大量用户的显卡分布。
BrowserCheck 实际读取什么
检测先尝试创建 WebGL 上下文,并以 experimental-webgl 作为回退。随后请求 WEBGL_debug_renderer_info 扩展;扩展可用时读取它提供的未遮蔽渲染器和供应商字段,不可用时将这两项显示为「Masked」。
指纹工具的 WebGL 哈希由渲染器、供应商和 WebGL 版本字符串构成。隐私报告使用另一组输入,还包含着色语言版本和最大纹理尺寸。因此应比较同一页面上的同一字段,不能把两种摘要直接互相比对。这两项均不是通过绘制复杂三维场景得到的像素指纹。实现位于 src/hooks/use-extended-fingerprint.ts 的 getWebGLInfo。
Lab 又是另一种观察方式:它检查 WebGL2 可用性及该上下文暴露的渲染器。保存比较记录时,应注明使用哪个页面、字段和方法,不能把 Lab 记录无声地替换为指纹工具结果。
Masked、不支持和不可用有什么区别
「Masked」表示本次没有获得可选的调试扩展,因此未读取其中额外的供应商和渲染器字段。它不表示所有图形特征均被隐藏,上下文仍可能提供标准 WebGL 参数。
「不支持」表示创建上下文时没有得到可用上下文;「不可用」表示观察过程中发生错误。仅凭这些状态不能确定原因。浏览器策略、图形支持和环境限制都值得检查,但页面不会替你断言其中哪一个是根因,也不会把失败标记为通过。
渲染器字符串是浏览器报告的信息,可能描述图形抽象层或软件渲染器。BrowserCheck 没有核验物理 GPU 序列号,也不能据此证明具体设备型号或设备所有者。共享结果时,保留必要的测试条件通常比宣称「识别到真实硬件」更准确。
如何比较两个条件
- 记录浏览器版本、操作系统、当前配置文件和硬件加速设置。
- 在改动前对同一页面运行两次,将渲染器、供应商、哈希和错误状态一起记录。
- 只改变一个图形或隐私设置;浏览器要求重启时,先完成重启。
- 重复同一检测。先比较可读字段,再比较摘要,便于理解变化位置。
- 恢复原设置后再测。如果期间有更新、远程桌面会话或扩展变化,一并记录。
这个流程用于诊断,不是建议永久关闭保护。某项设置可能影响图形应用能否运行,功能影响应单独记录,不能与本页可观察到的指纹变化混为一谈。若无法维持相同条件,应明确写出比较的限制。
能得出哪些结论
渲染器字符串变化,说明网页收到的图形信息不同;哈希不变,只说明当前摘要没有变化。二者均不能证明其他网站如何组合信号,也不能排除网站继续通过账户或本地存储识别会话。
不要把遮蔽结果或检测失败解释为安全。BrowserCheck 没有人群基准数据,无法计算显卡配置的稀有度;它也没有覆盖所有 WebGL 扩展或第三方可能采用的渲染方法。判断结果时需要保留这些边界。
Canvas 指南介绍另一种绘图观察,浏览器泄漏检测则比较网络地址。图形信息变化不能被描述成修复了网络泄漏,把不同方法分开会让排查结论更有用。
来源与审核说明
本文于 2026 年 9 月 27 日对照当前 BrowserCheck 实现和以下文档整理,没有声称某个硬件或浏览器版本已经通过上述流程,也没有编造测试截图或测量结果。
- MDN:WEBGL_debug_renderer_info,可选调试扩展及相关隐私限制。
- MDN:getParameter,上下文参数读取方式。
- W3C:缓解浏览器指纹风险,浏览器特征组合的影响。