← 返回博客

ClientRects 指纹是什么?多账号环境一致性核对指南

核心结论:检测页的 ClientRects 读的是网页元素的布局盒子,一组带小数点的宽高和坐标。两个环境读数对不上,通常出在字体渲染、屏幕缩放或系统差异上。它属于环境一致性的一部分,不能单独禁用,处理方式是指纹设置里的档位选择加实测。

「一致性自查做到指纹这一层,两个环境的 ClientRects 读数不一样。」或者反过来:检测页这一栏标了黄,不知道算不算问题。这类疑问的共同点是,参数名字见过,但它量的是什么、改了会影响什么,心里没有底。

这篇文章按排查顺序回答四件事。这个读数是什么,为什么两个环境会对不上,它在环境一致性里说明什么,在 MostMate 指纹浏览器里怎么配怎么验。MostMate 为每个账号准备一套彼此隔离的浏览器环境,ClientRects 是指纹设置里的一项。

ClientRects 指纹到底是什么

一句话:ClientRects 指纹读的是页面元素的精确盒子坐标。调用 getBoundingClientRect() 能拿到元素的宽度、高度和相对视口的位置,MDN 文档的定义是「返回元素的大小及其相对于视口的位置」;折行的行内元素用 getClientRects() 读,每行一个矩形。

关键在数值形态。坐标不是整数。是小数点后多位的浮点数,比如 147.359375。网站不需要任何权限,一段脚本在页面里建个隐藏元素、填入固定文字,读回矩形就能拼出签名,整个过程混在正常的布局计算里。

运营者要在意它有三个理由。它没法被禁用,布局计算是网页正常工作的基础;它跨会话稳定,同一台设备读数基本不变;它和字体、屏幕参数一样,属于环境声明的一部分,风控会拿来做交叉核对。

image

为什么两个环境的读数会对不上

同一行文字的宽度,由从「这段文字」到「最终像素」的一整条排版管线决定。管线里的每一层都会留下可复现的差异:

  • 文字排版引擎:Windows、macOS、Linux 各有一套,同一个字体、同一串字符,算出的字距不同。
  • 屏幕缩放:高分屏和系统缩放会改变取整粒度,小数位随之变化。
  • 字体回退:页面要的字体没装,换备用字体,宽度跟着变。
  • 浏览器引擎与页面缩放:不同内核断行算法不同,页面缩放直接进布局管线。

这些差异都不大,单看一个数字说明不了什么。组合起来,能描述「这台设备跑的什么系统、什么渲染栈」。它和字体指纹是近亲:字体枚举直接问名单,ClientRects 量的是渲染结果,两者可以互相印证。设备级、窗口级的尺寸参数在屏幕分辨率那篇写过,ClientRects 是更深一层的元素级信号。

这个读数在环境一致性里扮演什么角色

它最大的价值在交叉验证:给环境声明找一个能对得上的实测参照。环境声明自己是 Windows、挂着一组常见字体,量出来的文字宽度却是另一种系统的取整风格。两个信号就打架了。风控不需要看懂原理,只需要发现矛盾。

配置的一致性比单项参数的罕见度更值得核对。排查两个环境是否会被判为同一人时,矩形读数应该和指纹面板声明的操作系统、字体列表放在一组对照,四维度自查的逻辑就是把声明与实测对齐。

还有一个常被忽略的用途:缩放检测。矩形取整方式能反推页面当前的缩放级别和系统缩放设置,这些信息和设备声明的屏幕参数又是一组可以互查的信号。环境之间缩放行为差别很大时,读数差异是正常的,先确认缩放状态再下结论。

MostMate 里怎么配

MostMate 的指纹设置表单里,ClientRects 单独占一项,旁边就是 Canvas、AudioContext、SpeechVoices 和 WebGL 图像。它只有两档:Real 档返回本机真实排版,Noise 档即噪音模式。

按场景选档。满足这两个条件可以选 Real:这台电脑的配置就是目标人群的主流配置,比如常见的 Windows 加默认字体组合;业务页面对排版精度要求高,不允许布局数值被改动。Real 档的代价是本机真实渲染特征原样暴露,如果电脑装了大量冷门字体,特征辨识度会跟着上升。

多环境共用同一台电脑,选 Noise。各环境的读数不再指向同一台本机,这是它主要的适用场景。代价是要接受一个约束。矩形值之间存在算术关系。整盒坐标要和内部文字的矩形对得上,相同字符串的宽度要能成比例。噪音如果只落在部分读数上,这些关系会被打破,反而制造更显眼的矛盾信号。所以选完档位必须实测,而不是默认配完就没问题。

切到 Noise 档后,指纹预览面板里 ClientRects 一栏会变成带六位代号的取值。代号只是噪音配置的标识,真实暴露的哈希要开环境跑一次检测页才看得到。

MostMate 指纹设置里的 ClientRects 参数位置示意

配完怎么验证

验证分两步走。先看数值有没有按预期变化,再看变完之后是否自洽。

第 1 步:双环境对比读数。 建两个环境,一个选 Real、一个选 Noise,分别打开 BrowserLeaks 的 Client Rects 检测页。同一台机器上,Real 环境的矩形值应该一致。Noise 环境应该与 Real 不同,两个 Noise 环境之间也应有区分。记录时重点看小数点后第三位起的部分,差异通常从这里开始。把每个环境的读数记下来,作为这份环境的基线。

第 2 步:核对自洽性。 数值变了只是第一步,变完之后要能经得起交叉检查:

  • 跨会话再测一次,同一环境的取值应当稳定,跳来跳去的读数本身就是异常。
  • 与指纹面板声明的操作系统、字体列表对照,渲染风格要能匹配上,不能一个信号说 Windows、另一个说 macOS。
  • 正常浏览几个常用页面,确认排版没有可见的错乱,尤其是表单、按钮和折行文本。

三步都过,这个参数才算配完。任何一步不过,先回到指纹设置核对档位。再考虑要不要换档。

常见问题

检测页 ClientRects 标红,一定是环境有问题吗?

不一定。先看两件事。环境声明的系统和字体与读数风格是否匹配,缩放状态是否和屏幕参数对得上。两处都正常,单项标红不必紧张;读数风格和声明明显冲突,才需要进指纹设置核对档位。

改浏览器缩放会改变 ClientRects 指纹吗?

会。缩放直接进布局管线,矩形取整随之变化。但缩放是所有用户都有的正常行为。风险在另一处:缩放状态与环境声明的屏幕参数对不上。跨会话稳定的部分仍由渲染栈决定。

ClientRects 能被禁用吗?

不能。布局计算是网页正常工作的基础,排版、弹窗定位、动画都依赖它。浏览器没有提供关闭开关。业界的做法是降低精度而不是禁用,Tor 浏览器就把测量值取整来减少可识别的差异。

无头浏览器为什么容易在元素尺寸上露馅?

无头环境的默认视口很固定,文字渲染栈单一。量出来的矩形和它声明 UA 所声称的设备经常对不上。风控拿 rect 和其他声明参数做交叉检查,这类环境很容易被挑出来。

结语

ClientRects 在一致性核对里的角色很具体:把环境声明和实测排版放在一起对,矛盾就是信号。检测页标红先对照声明参数和缩放状态,确认属于一致性缺口,再进指纹设置处理。

MostMate 把 ClientRects 连同其他渲染参数放进同一张指纹设置表单,Real 与 Noise 两档控制读数来源,产品功能的完整面貌可以到 MostMate 官网过一遍。环境建好之后,用双环境对照把读数基线记下来,比任何配置技巧都实在。也可以下载 MostMate,建两个环境把 Real 与 Noise 的差异亲自量一遍。

MOSTMATE

让多账号安全管理更简单

从第一个账号开始,用 MostMate 建立更安全、更智能、更高效的多账号运营方式。

  • 环境彼此独立,身份逻辑一致。
  • AI 自动化 · 账号健康 · 团队运营
下载 MostMate