反欺诈系统比较的不是 Cookie,而是由多项浏览器信号组成的指纹。本文拆解这些信号及其权重,并说明为什么只改 Canvas 不够。
网站看到的不是一个“浏览器”标签,而是一组测量结果。单项信号并不强,但组合后形成的指纹能跨越 Cookie 清理和 IP 更换。主要信号包括:
| 频道 | 正在测量什么 | 典型区别值 |
|---|---|---|
| 字体列表 | 系统上安装了哪些字体 | 最高熵:9.45 位,35% 的机器是唯一的 |
| WebGL | 显卡线、渲染参数 | 高,依赖于硬件 |
| Canvas | 渲染图像的哈希值 | 高 |
| 音频 | 通过网络音频的信号哈希 | 在不同的机器上都很高 |
| 屏幕和 DPR | 分辨率和像素密度 | 平均 |
| 时区、语言 | 系统设置 | 个体性低,一致性很重要 |
字体排在首位,是因为它在我们的测量中信息量最高。仅安装字体列表一项,就能让样本中 35% 的电脑保持唯一。
项目最初的测量暴露了一个严重问题。同一台电脑上的两套配置如果没有独立设备参数,就会 得到相同结果 在字体指标、WebGL 参数、clientRects 和音频结果上始终一致。网站无需依赖 Cookie 或 IP 就能关联这些账号。这次测量决定了产品架构。
解决办法不是随意加入噪声,而是为每套配置分配来自真实电脑、彼此一致的设备参数。接入设备配置后,同样的信号开始出现差异。我们在真实浏览器中验证了结果:
| 表面 | 两个配置文件之间有所不同 |
|---|---|
| WebGL 供应商和渲染器 | 是 |
| 参数 WebGL | 是 |
| 屏幕几何形状和 DPR | 是 |
| 核心数量和内存 | 是 |
| 字体列表 | 是 |
| 语音合成声音 | 是 |
| 网络音频常量表 | 是 |
| Canvas | 是的,噪音来自配置文件种子 |
只改 Canvas、却保留真实字体列表,无法阻止关联;其他信号仍会重合。更重要的是,有些信号不应被篡改。
引擎会主动 保留常见字体的原始文本指标。探测器有检查 measuretext-grid,专门用于识别这类失真;强行修改反而会暴露浏览器。clientRects 也是如此(参见 bcr-vs-range)。这些信号本来就不该不同:两台实体电脑只要操作系统和 DPR 相同,Arial 的宽度就会一致,因为它由字体文件和系统决定。
无需相信宣传。使用免费套餐创建两个配置,在各自的浏览器中打开测试页面,直接比较原始数值:
Canvas 与 WebGL 的结果不同,但每套配置内部保持一致。您可以直接查看原始值,而不必相信我们的描述。也可以打开 浏览器指纹测试:它会读取当前浏览器的信号,并在旁边放置一套 NimbusX 配置供您比较。
目前仍有一项信号会关联同一台电脑上的配置:渲染音频哈希。引擎扰动按域名区分,而不是按配置区分。两台实体电脑的哈希不同,同一台电脑上的配置目前会得到相同结果。面板会在每套配置的 AUD 单元格中明确显示这一点。在 NimbusX 自有引擎版本完成前,同一平台的配置应分散在不同电脑上。