EnvTrace 浏览器指纹检测方法
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 完整性
- 图形与硬件
- 跨上下文一致性
- 稳定性
以及:指纹一致性评分、检测覆盖度、需要确认的信号、原始浏览器指纹信息。
当采集信号、检测规则、评分权重、重要阈值或结果含义发生实质变化时,这份方法会更新版本。