NimbusX
00
› 页面已加载
← 博客
指纹08.08.20269分钟

检测器如何关联浏览器配置

反欺诈系统比较的不是 Cookie,而是由多项浏览器信号组成的指纹。本文拆解这些信号及其权重,并说明为什么只改 Canvas 不够。

01指纹,而不是 Cookie

网站看到的不是一个“浏览器”标签,而是一组测量结果。单项信号并不强,但组合后形成的指纹能跨越 Cookie 清理和 IP 更换。主要信号包括:

频道正在测量什么典型区别值
字体列表系统上安装了哪些字体最高熵:9.45 位,35% 的机器是唯一的
WebGL显卡线、渲染参数高,依赖于硬件
Canvas渲染图像的哈希值高
音频通过网络音频的信号哈希在不同的机器上都很高
屏幕和 DPR分辨率和像素密度平均
时区、语言系统设置个体性低,一致性很重要

字体排在首位,是因为它在我们的测量中信息量最高。仅安装字体列表一项,就能让样本中 35% 的电脑保持唯一。

02基准测试发现了什么

项目最初的测量暴露了一个严重问题。同一台电脑上的两套配置如果没有独立设备参数,就会 得到相同结果 在字体指标、WebGL 参数、clientRects 和音频结果上始终一致。网站无需依赖 Cookie 或 IP 就能关联这些账号。这次测量决定了产品架构。

解决办法不是随意加入噪声,而是为每套配置分配来自真实电脑、彼此一致的设备参数。接入设备配置后,同样的信号开始出现差异。我们在真实浏览器中验证了结果:

表面两个配置文件之间有所不同
WebGL 供应商和渲染器是
参数 WebGL是
屏幕几何形状和 DPR是
核心数量和内存是
字体列表是
语音合成声音是
网络音频常量表是
Canvas是的,噪音来自配置文件种子

03为什么只改 Canvas 还不够

只改 Canvas、却保留真实字体列表,无法阻止关联;其他信号仍会重合。更重要的是,有些信号不应被篡改。

引擎会主动 保留常见字体的原始文本指标。探测器有检查 measuretext-grid,专门用于识别这类失真;强行修改反而会暴露浏览器。clientRects 也是如此(参见 bcr-vs-range)。这些信号本来就不该不同:两台实体电脑只要操作系统和 DPR 相同,Arial 的宽度就会一致,因为它由字体文件和系统决定。

这个错误几乎导致了错误的方向。 第一版检测只测量了十八款常见字体的文本宽度,因此每次都会重合,看起来像是设备配置没有生效。真正能区分电脑的是 已安装字体列表,而不是共有字体的文本宽度。修正检测方法后,结果正好相反:配置 B 能看到三款专属字体,配置 A 一款也看不到。

04如何自行验证

无需相信宣传。使用免费套餐创建两个配置,在各自的浏览器中打开测试页面,直接比较原始数值:

$ python -m app.cli profile create --name link-a $ python -m app.cli profile create --name link-b # 打开两个配置,并访问 nimbusx.app/check

Canvas 与 WebGL 的结果不同,但每套配置内部保持一致。您可以直接查看原始值,而不必相信我们的描述。也可以打开 浏览器指纹测试:它会读取当前浏览器的信号,并在旁边放置一套 NimbusX 配置供您比较。

05当前限制

目前仍有一项信号会关联同一台电脑上的配置:渲染音频哈希。引擎扰动按域名区分,而不是按配置区分。两台实体电脑的哈希不同,同一台电脑上的配置目前会得到相同结果。面板会在每套配置的 AUD 单元格中明确显示这一点。在 NimbusX 自有引擎版本完成前,同一平台的配置应分散在不同电脑上。

06了解更多

音频指纹:当前限制 · 一致性比数量更重要

下载NimbusX技术问题: @Get_NimbusX_Bot