浏览器窗口大小是网络应用程序用来识别用户设备的参数之一。虽然这一信息乍看之下无关紧要,但其独特的特性可以成为反欺诈系统的有力工具。此类系统会分析浏览器窗口大小(包括实时变化)以及 HTTP 标头中传输的数据,以检测可疑活动并识别伪造信息的企图。 ###### 浏览器窗口大小分析的历史和应用 浏览器窗口大小(视口)测量最早是通过 DOM API 提供给开发人员的,始于 JavaScript 的早期版本。这些数据用于根据用户的屏幕定制内容。随着技术的发展,反欺诈系统开始使用窗口大小作为附加参数来创建用户的数字指纹。 如今,窗口尺寸数据可包括 - 视口尺寸(window.innerWidth 和 window.innerHeight)。 - 浏览器窗口的整体尺寸。 - 支持的屏幕分辨率。 - 显示刷新率。 这些参数会因设备、操作系统和浏览器的不同而变化,从而形成一组独特的特征。 ###### HTTP 标头中的窗口大小 有些浏览器会在 HTTP 标头(如用户代理客户端提示,如 Viewport-Width 和 Device-Width)中传达窗口大小信息。这不仅能让网站根据屏幕尺寸调整内容,还能让反欺诈系统利用这些数据检查是否存在欺骗行为。 **传输数据示例:** - 视口宽度:1920 - 设备宽度:2560 如果报告的数据与实际窗口大小不符,则可能表明使用了反检测浏览器。 ###### 通过窗口大小识别用户的方法 **1. 大小稳定性分析** 反欺诈系统会跟踪会话期间窗口大小的变化。例如 - 突然的大小变化(尤其是与流行的预设分辨率相对应时)可能表明存在欺骗行为。 - 不符合设备特征的恒定窗口大小值可能是仿真的迹象。 **2. 与屏幕分辨率比较** 系统会检查窗口大小是否与声明的屏幕分辨率一致: - 如果屏幕分辨率为 1920×1080,而窗口尺寸为 3000×2000,则可能是欺骗企图。 **3.使用异常渲染** 有时,由于 DOM 处理或图形环境的特殊性,浏览器可能会报告不正确的窗口尺寸。这些异常情况可用于检测虚假设备。 ###### 欺骗窗口大小的方法 欺诈者使用以下方法进行伪装: 1. **虚构尺寸:** 通过开发工具或插件更改 window.innerWidth 和 window.innerHeight 值。 2. **使用预设设置:** 模仿常用设备的尺寸以避嫌。 3. **欺骗 HTTP 标头:** 更改 Viewport-Width 和 Device-Width 值。 ###### 欺骗检测方法 **1. 测试窗口大小** 反欺诈系统可能会创建需要调整窗口大小的脚本(如弹出窗口)。被欺骗的浏览器可能无法充分响应此类请求。 **2. 检查大小匹配** 将 DOM 中的数据(如 window.innerWidth)与 HTTP 标头中的数据进行比较,有助于检测大小是否匹配。 **3.用户行为分析*** 在与网站交互的过程中,窗口大小的变化可能异常平滑,或者相反,在仿真的情况下过于突然。 让我们举例说明反欺诈系统可能会从用户浏览器中接收到哪些尺寸。 让我们打开Chrome浏览器中的browserleaks.com/javascript页面。  在该页面上,网站会确定显示器尺寸、屏幕方向和角度、浏览器窗口的外部和内部尺寸。让我们进一步了解资源可以获得哪些尺寸和值。 让我们打开测试页面 test-webapi.tech/screen  测试页面显示了以下参数: **方向类型** 表示设备当前的屏幕方向(如纵向为主、横向为主)。 **方向角度** 屏幕相对于其自然方向的旋转角度,单位为度。 **可用宽度** 可供使用的屏幕宽度(不包括任务栏等系统元素)。 **外宽** 浏览器窗口的全宽,包括可见页面以外的区域,如滚动条和框架。 **屏幕宽度** 设备屏幕的全宽,单位为像素。 **内宽** 浏览器窗口可见内容区域的宽度(不包括滚动条和框架)。 **可用高度** 可供使用的屏幕高度(不包括任务栏等系统元素)。 **外部高度** 浏览器窗口的全高,包括可见页面以外的区域,如滚动条和框架。 **屏幕高度** 设备屏幕的全高,单位为像素。 **内部高度** 浏览器窗口可见内容区域的高度(不包括滚动条和框架)。 **可用左侧** 可用屏幕区域相对于屏幕起点(通常为 0)的水平位置。 **可用顶部** 可用屏幕区域相对于屏幕起点的垂直位置(通常为 0)。 **最大触摸点数** 设备支持的最大触摸点数。 **颜色深度** 用于表示单个屏幕像素颜色的位数。例如,24 或 32。 **像素深度** 像素深度的位数,通常与色彩深度值相同。 **设备像素比** 物理设备像素与逻辑像素的比率。例如,标准屏幕为 1.0,视网膜显示屏为 2.0。 **客户端宽度** html 元素内部内容区域的宽度(不含滚动条)。 **客户高度** html 元素内部内容区域的高度(不含滚动条)。 **屏幕 X** 浏览器窗口左上角相对于设备屏幕的水平位置,单位为像素。 **屏幕 Y** 浏览器窗口左上角相对于设备屏幕的垂直位置,单位为像素。 **滚动宽度** 页面内容的全宽,包括可滚动的隐藏区域。 **滚动高度** 页面内容的全高,包括可滚动的隐藏区域。 **视觉视口宽度** 显示给用户的区域宽度,包括可能的缩放。 **可视视口高度** 显示给用户的区域高度,包括可能的缩放。 **滚动 X** 页面从起始位置开始的水平偏移,单位为像素。 **滚动 Y** 页面从起始位置开始的垂直偏移,单位为像素。 **高度差(外侧-内侧)** 浏览器窗口全高与内容可见高度之差。用于确定浏览器管理面板的大小。 在显示的参数中,有些参数在一个配置文件中很少更改,例如:方向类型、屏幕尺寸、色深、像素深度、最大触摸点数;有些参数只能在特定类型的设备上更改,例如:方向角度、屏幕 X、屏幕 Y。 让我们比较一下 Chrome 浏览器和反检测浏览器获得的数据:  在桌面版本中,反检测浏览器很好地交换了屏幕和浏览器尺寸参数,但屏幕 X 和屏幕 Y 值均为 0,这说明我们的浏览器被固定在屏幕左上角,每次打开配置文件时,反检测浏览器都会显示这个位置,而真正的 Chrome 浏览器默认情况下会在屏幕中央打开一个新窗口。需要注意的是,每次使用该配置文件时,我们都会获得相同的浏览器大小,而普通用户经常会更改非全屏打开的浏览器窗口大小。 让我们关注一下高度差值,在占据部分屏幕的 Chrome 浏览器中,管理面板的高度是 95px,让我们在带有书签面板的 Chrome 浏览器中检查一下这个值:  本例中管理面板的高度为 129px。这样,资源就能准确确定书签面板在用户浏览器中的可见度。 让我们在 Firefox 浏览器中打开测试页面:  在 Firefox 浏览器中,管理面板的高度是 91px,因此反欺诈系统可以确定用户在 User-Agent 中声明的浏览器是否与原始浏览器的标准尺寸一致。值得注意的是,全屏浏览器中管理面板的尺寸与占据用户部分屏幕的浏览器尺寸不同。 让我们在移动设备和试图将自己显示为移动设备的反检测浏览器上重复测试:  反检测浏览器会将 “内部高度 ”值设置为等于 “外部高度 ”值,而在真正的移动浏览器中,“内部高度 ”值要大于 “外部高度 ”值,这种替换可能会触发反欺诈系统。还要注意的是,在反检测浏览器的测试模式中,页面的垂直滚动值仅由整数像素值(参数 Scroll Y)决定。 ###### 浏览器操作事件及其在反欺诈系统中的作用 现代网络应用程序积极使用浏览器事件来改善用户交互。不过,点击、滚动和触摸事件等操作也提供了独特的数据,反欺诈系统可利用这些数据来检测可疑活动。这些系统通过分析用户行为来检测机器人、操作模拟或数据欺骗。 ###### 基本浏览器操作事件 浏览器事件包括用户可能在网页上执行的各种交互。其中最重要的有 - **点击(click,dblclick):** 捕获页面元素上的鼠标点击。 - **滚动:** 记录页面可见区域的移动。 - **鼠标悬停(鼠标移出、鼠标移出、鼠标移动):** 跟踪光标移动。 - **触摸事件(touchstart、touchmove、touchchend):** 记录触摸屏设备上的操作。 - **文本输入(keydown、keyup、input):** 记录基于文本的用户操作。 - **焦点(聚焦、模糊):** 确定输入元素是否被激活或停用。 - **对变化的响应(调整大小、改变方向):** 检测浏览器窗口大小或设备方向的变化。 ###### 事件在反欺诈系统中的作用 反欺诈系统利用事件来分析用户的实际行为,并将其与预期情景进行比较。分析的主要方面包括 **1. 行动的速度和节奏** ◦ 机器人通常会模仿用户的操作,但可能会表现出不自然的节奏,例如点击或滚动速度过快。 在滚动的情况下,真实用户往往会以不同的速度移动页面,而机器人可能会使用线性运动。 **2. 触摸事件的特征** 真实的触摸事件具有唯一的触摸坐标,并可能包含力数据(如果设备支持此类传感器)。 模拟触摸事件通常以固定值或坐标模式捕获。 **3. 非自然行为** 反欺诈系统会跟踪重复行为,如点击间隔时间相同或滚动角度相同。 光标长时间不动也可能是自动化的迹象。 ###### 事件欺骗技术 攻击者可以使用多种方法来模拟事件: **1. 自动化脚本**。 使用 Puppeteer 或 Selenium 等自动化库创建人工事件(如 document.dispatchEvent)。 **2. 模拟触摸事件** 开发工具允许您在不存在的设备上运行模拟触摸。 **3. 事件数据替换*** 更改事件属性(如坐标或执行时间)以隐藏自动化。 ###### 检测欺骗的方法 反欺诈系统使用不同的方法来检测欺骗: **1. 时间戳分析** 将事件时间戳与实时时间进行比较:人为事件可能表现出不切实际的速度。 **2. 坐标验证** 系统分析点击或触摸事件的坐标分布。可疑模式(如集中在一个地方)可能表明存在欺骗行为。 **3.使用验证码*** 交互式测试需要难以模拟的操作(如拖放项目)。 **4. 比较浏览器数据** 将事件参数(如触摸点或滚动数据)与设备数据进行比较,以识别不一致之处。 举例说明: 让我们在 Chrome 浏览器中打开测试页面 test-webapi.tech/touch 并在文本输入框中输入文本:  点击按钮:  请注意,鼠标移动坐标和单击按钮事件以及输入文本前单击输入框事件都被记录下来,这些值与鼠标移动坐标相对应。 页面滚动事件也会被记录  对于反欺诈系统来说,如果在点击按钮之前,鼠标没有移动到页面上按钮的坐标位置,或者在关闭浏览器标签页时没有将鼠标移动到浏览器栏上,那么点击按钮就会显得可疑。 让我们用模拟移动浏览器检查移动设备和反检测浏览器中的事件。让我们比较一下字段中的文本输入事件:  在这个示例中,我们可以看到明显的不同: 1. 触摸事件是在反检测浏览器中的整数坐标上执行的。 2. 反检测浏览器中触摸事件的半径为 11.5px,是实际移动设备的 10 倍多。 3. 3. 在反检测浏览器中,屏幕的可见部分不会缩小,不会像真实设备那样在设备屏幕上模拟出虚拟键盘的外观。 请注意,移动设备屏幕可见部分的大小不仅会在设备屏幕上出现键盘时发生变化,还会在其他事件中发生变化,例如,向下滚动页面时,移动版浏览器的地址栏会被隐藏,屏幕可见部分的大小会增大。 让我们比较一下向下滚动页面时的事件:  在这个测试中,我们可以看到反检测浏览器中的页面滚动操作日志与移动设备上的日志有所不同。除了只能看到整数坐标值外,每次页面向下移动一个小像素值后,我们还会得到一个触摸事件记录。 现在很多反欺诈系统都会跟踪浏览器中的事件,如果我们打开亚马逊网站,就会发现该网站会跟踪大量事件,如:页面加载时间、页面大小调整、用户在页面上的操作等。  #### 输出 浏览器操作事件以及用户屏幕和浏览器尺寸值为反欺诈系统提供了大量数据集。通过浏览器尺寸分析可以唯一识别用户,而通过用户行为分析则可以检测机器人、仿真或其他欺骗企图。为了提高准确性,这类系统采用了综合方法,将事件数据与设备特征和预期情景进行比较。 班尼赫-M.V.* *