EnvTrace 浏览器指纹检测方法

EnvTrace 当前版本 1.0 最近审阅

EnvTrace 浏览器指纹检测用于检查:当前浏览器向网站暴露出的指纹信号,是否能够组成一套自洽的浏览器环境。

检测会从浏览器身份、API、图形与硬件、不同运行上下文和稳定性五个方面进行评估,并给出:

  • 指纹一致性分数
  • 检测覆盖度
  • 五个维度的结果
  • 需要确认的具体信号
  • 当前浏览器实际暴露出的指纹信息

分数越高,表示本次已经完成的检查中,发现的明显冲突越少。

网站能看到哪些浏览器指纹

浏览器打开网页时,会向网站提供或暴露一组环境信息。

EnvTrace 当前会读取和检查的信号包括:

  • User-Agent
  • 浏览器和版本
  • 操作系统
  • Platform
  • Client Hints
  • 屏幕尺寸
  • Device Pixel Ratio
  • CPU 线程数
  • 设备内存
  • 触摸能力
  • 语言
  • 时区
  • Canvas
  • WebGL Vendor
  • WebGL Renderer
  • Audio
  • 字体
  • WebRTC
  • 自动化相关信号

部分身份信息还会在主页面、iframe 和 Worker 中分别读取,用来检查不同运行上下文是否返回一致结果。

这些信息是浏览器指纹评估的基础。

指纹一致性分数

指纹一致性分数范围为 0–100。它用于概括当前浏览器已经完成的各项检查中,浏览器信号整体是否能够互相对应。

分数从 100 开始。当检测到明确冲突或需要确认的信号时,根据问题的证据强度和所属维度进行扣分。

当前规则将问题分为不同强度,例如:强冲突、强证据、需要确认、观察项。观察项用于记录信息,不一定影响分数。

同一类问题设置扣分上限,避免同一个底层原因触发多个相似规则后重复扣分。最终结果由五个维度共同组成。

五个评估维度

身份一致性

身份一致性检查浏览器对外声明的身份是否能够互相对应。主要比较:

  • User-Agent
  • 浏览器品牌
  • 浏览器版本
  • 操作系统
  • Platform
  • Client Hints
  • 移动端标记
  • 其他浏览器身份信号

例如,一个浏览器如果通过 User-Agent 声明自己运行在 Windows,而 Platform 和 Client Hints 也返回 Windows,这些信号能够互相支持。

如果不同接口返回明显冲突的浏览器、系统或设备身份,就会被标记为需要确认。

当前权重:30%

API 完整性

API 完整性检查网页能够访问的浏览器接口是否表现出明显异常。主要包括:

  • 自动化相关标记
  • 关键 API 是否表现为浏览器原生实现
  • Navigator 属性是否存在异常覆盖
  • 同一类信息通过不同接口读取时是否存在明显差异
  • 部分浏览器属性是否出现不自然的修改痕迹

这类结果用于发现:当前网页看到的浏览器 API 是否存在明显不一致。

单独一个 API 信号不会直接决定整个 Browser Profile 是否存在问题。EnvTrace 会结合其他信号一起判断。

当前权重:25%

图形与硬件

图形与硬件检查浏览器声明的设备身份,与网页能够读取到的图形和硬件信息是否能够互相对应。

当前主要使用:

  • WebGL Vendor
  • WebGL Renderer
  • 操作系统
  • 设备类型
  • CPU 线程数
  • Device Memory
  • 屏幕尺寸
  • Device Pixel Ratio
  • 触摸能力

例如,操作系统、图形环境和设备形态之间如果出现明确矛盾,会被记录为需要确认的信号。

EnvTrace 优先检查比较明确的冲突,不会仅凭一个显卡名称、线程数或内存值就判断整个浏览器环境异常。

当前权重:20%

跨上下文一致性

同一个浏览器中的身份信息,可以从不同 JavaScript 运行环境中读取。

EnvTrace 会比较主页面、iframe 和 Web Worker 能够获取到的部分关键身份信息。

如果同一个 Browser Profile 在不同运行上下文中返回明显不同的平台、浏览器或系统信息,就会被记录为跨上下文不一致。

这项检查主要用于发现:同一个浏览器内部,不同运行环境是否看到了一套不同的身份。

当前权重:15%

稳定性

稳定性检查部分核心指纹信号在同一次检测中是否保持一致。

当前会对部分信号进行重复采集,例如 Canvas、Audio、WebGL。

如果同一个页面、同一次检测中,多次读取结果出现非预期变化,会被记录为稳定性问题。

EnvTrace 也可以比较当前浏览器和本机之前保存的检测结果。

跨检测变化目前主要作为观察信息使用,因为浏览器升级、Profile 修改、系统变化或浏览器自身的隐私机制都可能导致结果变化。

当前权重:10%

检测覆盖度

不是所有浏览器都支持完全相同的接口。浏览器版本、隐私设置、权限和运行环境,都可能导致部分信号无法读取。

因此 EnvTrace 不会把「没有数据」自动算成「检查通过」。

覆盖度表示:本次计划进行的指纹检查中,有多少获得了足够的数据并完成判断。

因此结果需要同时看:指纹一致性分数、检测覆盖度。

例如:98 / 100 · 覆盖度 96% 表示已经完成的大部分检查没有发现明显冲突,同时仍有少量项目没有获得足够数据。

需要确认的信号

总分下面会列出本次检测中需要进一步确认的具体项目。每一项会说明:

  • 哪个信号触发了规则
  • 哪些值发生了冲突
  • 属于哪个检测维度
  • 证据强度
  • 为什么被记录下来

例如:

  • User-Agent 与 Client Hints 平台不同
  • Platform 与操作系统声明冲突
  • WebGL 图形环境与设备身份明显不符
  • 主页面和 Worker 返回不同的平台信息
  • 同一次检测中核心指纹信号发生变化

用户应该优先看这些具体项目,而不是只看总分。

原始浏览器指纹信息

EnvTrace 会在评估结果下面继续展示当前网页实际读取到的浏览器信息。包括:

  • 浏览器
  • User-Agent
  • 操作系统
  • Platform
  • Client Hints
  • 屏幕
  • Canvas
  • WebGL
  • Audio
  • 字体
  • 语言
  • 时区
  • 硬件信息

这些原始信号是指纹评估的依据。如果某个结果需要进一步核对,可以回到这里查看参与判断的实际值。

评分用于定位问题,原始信号用于解释问题。

这个检测适合什么场景

浏览器指纹检测适合检查普通浏览器,也适合检查经过配置或修改的 Browser Profile,例如:指纹浏览器、隐私浏览器、独立 Browser Profile、自动化测试环境、虚拟化浏览器环境、修改过部分浏览器属性的环境。

对于经过配置的 Browser Profile,检测重点是:

修改之后,网站实际看到的浏览器身份、API、图形硬件和运行上下文是否仍然能够互相对应。

例如,只修改 User-Agent,并不代表网站看到的其他信号也一起发生了变化。Platform、Client Hints、WebGL、屏幕、硬件和其他接口仍可能暴露不同的信息。

EnvTrace 会把这些能够从网页端直接观察到的冲突列出来。

100 分代表什么

100 分表示:在本次有数据并完成的指纹检查中,没有发现明显冲突。

它不代表:

  • 当前浏览器无法被网站识别
  • 当前环境一定会被第三方平台接受
  • 某个账号一定不会被限制
  • 当前浏览器与某一台真实设备完全相同

第三方网站和平台还可能使用 EnvTrace 无法观察到的信息,例如:

  • 服务器端请求信息
  • TLS 和网络协议特征
  • 账号历史
  • 登录记录
  • 行为数据
  • 设备历史
  • 多次访问之间的关联信息
  • 平台内部的检测规则

EnvTrace 只评估当前网页能够观察到的浏览器指纹信号。

与环境一致性有什么区别

浏览器指纹检测主要检查:浏览器内部是否自洽。包括浏览器身份、API、图形与硬件、不同运行上下文、稳定性。

环境一致性检测主要检查:浏览器与当前网络环境是否能够互相对应。例如:

  • 浏览器时区与当前网络环境
  • 浏览器语言与出口国家
  • WebRTC 公网地址与当前出口 IP
  • 设备信号与整体环境

因此,一个 Browser Profile 的浏览器内部可以完全一致,但它和当前网络环境仍然可能存在不一致。

这两个检测解决的是不同问题。

如何读一份浏览器指纹结果

建议按这个顺序查看:

  • 指纹一致性分数:整体有没有明显冲突。
  • 检测覆盖度:这次有多少检查真正完成。
  • 需要确认的信号:具体是什么问题触发了规则。
  • 五个检测维度:问题集中在哪一类。
  • 原始指纹信息:网站实际读取到了什么。

如果浏览器内部没有明显问题,还需要继续判断它和当前 IP、时区、语言及 WebRTC 是否匹配,可以查看环境一致性检测。

方法版本

Version 1.0 定义当前浏览器指纹检测使用的五个评估维度:

  • 身份一致性
  • API 完整性
  • 图形与硬件
  • 跨上下文一致性
  • 稳定性

以及:指纹一致性评分、检测覆盖度、需要确认的信号、原始浏览器指纹信息。

当采集信号、检测规则、评分权重、重要阈值或结果含义发生实质变化时,这份方法会更新版本。