1. 浏览器指纹中的 ClientRects 是什么
getBoundingClientRect() 方法返回元素的大小及其相对于视口的位置。现代网站通过分析 JavaScript 布局 API 和浏览器 渲染计算 在不同条件下的行为来指纹用户:
- DPI / 缩放设置
- 字体加载差异
- 缩放级别变化
- 浏览器引擎布局引擎(例如 Blink、WebKit、Gecko 样式)
一些反欺诈平台观察模式,如:
- 缩放的子像素精度
- 基于浮点数的布局位置的四舍五入和小数处理
- 用于测试的标准隐藏容器的相对尺寸差异
尽管经常被忽略,ClientRects 指纹可以 泄露浏览器可缩放行为,这种行为在会话中非常一致——而且在不破坏布局相关 UI 功能的情况下极难伪装。
2. 平台如何检测 ClientRects 指纹
反欺诈系统可以通过以下方式指纹浏览器:
- 测量不可见测试元素的框坐标:通过将元素隐藏在屏幕外或永久隐藏在布局中,它们可以比较预期值与实际 rect 值,以发现伪装迹象。
- 在缩放期间观察缩放行为:一种简单但有效的方法——观察者跟踪浏览器在模拟“缩放”或调整大小期间的变换和 rect 更新,并进行交叉引用逻辑。
- 浮点计算泄露:微小的十进制精度差异可以识别浏览器引擎的内部布局引擎——例如,Chrome 的计算方式不同于 Safari 或 Firefox。
- CSS 样式一致性:一些高级系统利用由样式更新引起的 reflow 和 relayout 变化,这些变化体现在 rect 数据中,以推断浏览器不一致性。
- 字体大小四舍五入检查:使用固定字体大小的预渲染测试元素可以揭示字体渲染引擎,这些引擎通常与操作系统类型相关,如 Windows、macOS 或 Linux/Android。
如果布局渲染浮点数过于数学上“干净”或甚至无法按照最细微的渲染规则变化——FlashID 以 真实偏差模式 创建这些——那么反指纹引擎会将这些记录为异常。
3. FlashID 如何掩盖 ClientRects 指纹
与其他仅伪装高级值的平台不同,FlashID 提供细粒度层控制来模拟真实的缩放行为,确保:
- 表观的像素数学一致性,同时微妙地禁用可追踪性
- 自然随机模式,模仿真实的渲染差异
FlashID 的 ClientRects 指纹解决方案包括:
- 通过动态元素操作进行 ClientRect 伪装:FlashID 动态注入并解析矩形测量,根据每个浏览器配置文件返回自定义但 合理的 rect 值。
- 可调节四舍五入精度:rect 尺寸的浮点精度可以每会话略微配置——反映自然的浏览器和系统行为。
- 与 CSS/字体和缩放模块的伪装同步:ClientRects 伪装与浏览器字体、缩放和样式设置紧密协作,确保匹配预期的渲染输出。
- Delta 方差注入:FlashID 向基于 rect 的测量注入人工方差以防止会话匹配——但在浏览器预期四舍五入或布局“噪声”范围内。
- 避免标准不可见 DOM 检查:系统模拟并计算所有必要的 rect 值,即使对于隐藏元素,欺骗检测系统相信异常行为。
- 测量元素抖动:针对每个配置文件,对元素尺寸值应用轻微偏差和抖动,为 FlashID 浏览器实例提供真实的渲染配置文件。
这种行为隔离确保即使在专注于深度 reflow 跟踪的网站上,你的 FlashID 浏览器也保持 不相关、非关联 和 难以追踪,使用布局方法。
您可能还喜欢

