惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
Scott Helme
Scott Helme
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Stack Overflow Blog
Stack Overflow Blog
Forbes - Security
Forbes - Security
T
The Blog of Author Tim Ferriss
Y
Y Combinator Blog
S
Schneier on Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Cisco Talos Blog
Cisco Talos Blog
N
News | PayPal Newsroom
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Project Zero
Project Zero
Cyberwarzone
Cyberwarzone
Vercel News
Vercel News
M
MIT News - Artificial intelligence
云风的 BLOG
云风的 BLOG
Google Online Security Blog
Google Online Security Blog
Simon Willison's Weblog
Simon Willison's Weblog
MongoDB | Blog
MongoDB | Blog
Martin Fowler
Martin Fowler
T
Tenable Blog
I
InfoQ
W
WeLiveSecurity
Google DeepMind News
Google DeepMind News
G
Google Developers Blog
D
DataBreaches.Net
博客园 - Franky
Know Your Adversary
Know Your Adversary
Spread Privacy
Spread Privacy
S
Security @ Cisco Blogs
Hacker News: Ask HN
Hacker News: Ask HN
J
Java Code Geeks
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
F
Full Disclosure
C
Cisco Blogs
Google DeepMind News
Google DeepMind News
P
Proofpoint News Feed
C
CXSECURITY Database RSS Feed - CXSecurity.com
The Cloudflare Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
I
Intezer
The GitHub Blog
The GitHub Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
F
Fortinet All Blogs
Jina AI
Jina AI
V
Visual Studio Blog
L
LINUX DO - 热门话题
WordPress大学
WordPress大学
aimingoo的专栏
aimingoo的专栏

博客园 - 与f

docker运行hermes agent python使用docx库对在word中的表格合并操作 Python 项目创建+依赖管理+版本控制 百度飞桨PaddleOCR-VL识别发票图片输出json格式 大模型微调后导出,部署服务然后后端调用 openclaw的一些聊天配置 docker 部署 openclaw llama.cpp编译 微信小程序显示ai返回的markdown或html C#多端桌面程序(可跨平台) 主流 MySQL 热备份方案 基于SRS(Simple Realtime Server)+ CDN边缘节点加速3个nginx做文件分发1个nginx做负载均衡 一份基于SRS(Simple Realtime Server)+ CDN边缘节点srs edge加速的万人级直播部署清单 HLS(HTTP Live Streaming)标准的视频及加密和解密播放 HLS(HTTP Live Streaming)标准的视频及加密 使用Dockerfile创建一个hyperf容器做为开发环境 docker的hyperf框架docker-compose一键安装 通过vm虚拟中的docker 环境做开发 ubuntu 安装后ssh 连接到服务器 lvm的概念和操作(linux) PHP Attributes 注解 centos 服务器查找一些字符串 Centos8网络配置小工具 Keepalive实现一个高可用负载均衡场景 Keepalived详解:原理、编译安装与高可用集群配置
微软的人机验证
与f · 2026-06-24 · via 博客园 - 与f

微软的人机验证

 点两次按钮,或长按按钮

微软的人机验证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。