微软的人机验证

微软的人机验证

 点两次按钮,或长按按钮

微软的人机验证PerimeterX/HUMAN,大量使用多层iframe嵌套,隐藏多个iframe显示一个有用的,使用 Shadow DOM (影子 DOM)。

 

1. Shadow DOM(影子 DOM)

完整术语:
  • ShadowRoot:影子根(devtools 里显示 #shadow-root
  • Shadow Tree:影子树(内部整套隔离 DOM)
  • Shadow Host:承载影子 DOM 的外层普通元素(host 宿主)

特征(PerimeterX 人机验证大量使用)

  1. 挂在普通 DOM 元素内部,不在主 DOM 树直接展示,肉眼看页面上存在,但控制台直接查 document 找不到;
  2. 自带隔离边界,CSS、DOM 查询默认穿透不进去;
  3. showdom 探针会递归检测页面所有 shadowRoot,校验是否被自动化篡改、隐藏、强行注入节点;
  4. 多层 iframe 内部再嵌套 shadow-root,是微软 HUMAN 验证的标准结构。
俗称:影子 DOM、虚拟 DOM 树、shadow 根。

2. 容易混淆的另一个:Virtual DOM(虚拟 DOM)

前端框架 React/Vue 内存里的 JS 对象树,浏览器原生不存在,只是内存数据,和页面渲染隔离无关,PerimeterX 不检测这个,基本不是你要找的。

3. iframe 本身不是虚拟元素

iframe 是独立完整文档,属于嵌套文档沙箱,和 shadow DOM 是两层隔离:
 
多层 iframe + 每层内部带 shadow-root = 微软验证页面典型结构。
 
 

二、快速区分(适配你的爬虫 / 自动化场景)

  1. 你在开发者工具看到 #shadow-root → Shadow DOM / ShadowRoot(影子 DOM)
  2. React/Vue 源码里的内存 diff 树 → Virtual DOM(虚拟 DOM,和页面检测无关)
  3. 多层内嵌页面标签 <iframe> → 嵌套框架,独立 window 上下文

三、PerimeterX showdom 对 Shadow DOM 的检测点

  • 遍历所有 host 元素读取 .shadowRoot
  • 对比影子树节点数量、尺寸、坐标、可见性;
  • 检测是否脚本直接跳过边界操作 shadow 内部按钮;
  • 多层 iframe 递归,每层内部再深度遍历 shadow-root,任意一层异常直接拦截。

一句话总结

你要的名词:Shadow DOM(影子 DOM),根节点叫 ShadowRoot。
 
 
posted @ 2026-06-24 08:49  与f  阅读(26)  评论(0)    收藏  举报