如何查看网站上运行着哪些防护措施以及它正在收集你的哪些信息
任何写过爬虫或在实际网站上进行端到端测试的人都会遇到这样的情况:脚本突然收到 403 状态码,或者无限重定向到一个空白页面。你坐在 DevTools 里,在 Network 和 Application 选项卡之间切换,试图猜测:Cloudflare 是否阻止了请求,DataDome 是否悄悄插入了一个不可见的检查清单,还是页面脚本在后台悄悄采集了 Canvas 和 WebGL 指纹?
Scrapfly 团队发布了一个名为 Scrapfly Anti-bot Detector 的开源 Chrome 扩展。这是一个面向安全研究人员、渗透测试人员和爬虫开发者的工具,可实时分析页面并显示当前激活的防护系统和触发的指纹识别技术。
扩展程序能检测什么
该扩展运行在 Manifest V3 上,不会向外部服务器发送数据。所有分析都在浏览器本地进行。
它将检测到的防护机制分为三类:
- 反爬虫防护系统。检测 Cloudflare、Akamai、DataDome、PerimeterX、Imperva、Kasada、Shape Security 和 AWS WAF。
- CAPTCHA。识别 reCAPTCHA、hCaptcha、FunCaptcha、GeeTest 和 Cloudflare Turnstile。
- 数字指纹识别技术。追踪 21 种指纹识别方法,包括 Canvas、WebGL、AudioContext、字体、WebRTC、Performance API、Navigator 属性和 Storage。
| 检测 | 历史记录 | 规则编辑器 |
|---|---|---|
|
|
|
|
多层检测的工作原理
反爬虫系统很少通过明确的响应头暴露自己。通常它们将逻辑分散在脚本、Cookie 和全局对象中。该扩展同时使用五层分析。
首先,它检查 DOM。扩展程序会查找特征标记元素、类名和关联的外部脚本。
同时,服务工作线程监控网络请求,过滤请求头、Cookie、请求 URL 和提交的有效载荷正文。
最有趣的部分在于拦截浏览器 API 调用。在页面脚本开始执行之前(处于 document_start 阶段),扩展程序会将钩子注入到页面的主上下文(MAIN world)中。如果防护脚本试图在画布上绘制隐藏元素或请求音频上下文参数,钩子会记录调用、收集调用参数,并通过隔离的桥接器将它们传递给检测器模块。
钩子不会无限期保持活跃:它们会在不活动两秒后或页面启动 8 秒后自动卸载。
| 数据提取工具 | 设置 |
|---|---|---|
|
|
|
用于深度分析的内置工具
除了简单的检测到的供应商列表之外,扩展程序还包含高级工具部分。它解决了一个实际问题:提取调试自动化所需的参数。
- 对于 reCAPTCHA、hCaptcha 和 Turnstile,该模块会找到 SiteKey、容器选择器和注册的 JS 回调。
- 对于 Akamai 和 DataDome,该工具会拦截生成的传感器数据并分析防护 Cookie 的有效性。
- 对于 FunCaptcha 和 GeeTest,它会解析公钥和挑战参数。
- 对于 Imperva 和 Shape Security,它会扫描特定请求头和关联的验证脚本。
该工具可以在浏览器执行最终重定向到目标页面之前,从中间挑战页面捕获数据。
项目架构和无构建步骤
源代码采用纯现代 JavaScript 编写,无需打包工具、Webpack 或 TypeScript。要在本地运行项目,只需克隆仓库并通过开发者模式将文件夹加载到 Chrome 中。
仓库结构分为清晰的层级:
core/
├── manifest.json # Конфигурация Manifest V3
├── background.js # Service Worker, сетевой анализ
├── content.js # Content script в ISOLATED world
├── content-main-world.js # JS-хуки в MAIN world
├── detectors/ # Правила детекции в формате JSON
│ ├── antibot/ # Cloudflare, Akamai, DataDome, Imperva
│ ├── captcha/ # reCAPTCHA, Turnstile, hCaptcha
│ └── fingerprint/ # Canvas, WebGL, Audio, Storage
└── modules/ # Менеджеры состояния и обработчики
所有检测签名和规则都提取到 detectors/ 目录中的 JSON 文件中。你可以通过内置的规则编辑器直接在扩展界面中编辑它们,添加自己的正则表达式、全局 window 对象变量检查或自定义 Cookie 签名。
为了性能优化,作者使用了编译后正则表达式的 LRU 缓存,消除了 ReDoS 导致的挂起风险,并使用 12 小时的结果缓存,在高置信度匹配时提前退出。
测试基于内置的 node:test 运行器编写,无需外部依赖。你可以用一条命令运行语法检查和测试:
npm run verify
这能帮助哪些任务
首先,扩展程序为爬虫开发者和数据分析师节省时间。与其手动挖掘混淆代码和网络日志,不如在几秒钟内准确了解你面对的是谁以及页面检查哪些环境签名。
第二个场景是审计你自己的防护。如果你正在生产环境中配置 WAF 或反爬虫模块,扩展程序会清晰展示外部观察者能否看到你的规则,以及挑战是否正常工作。
最后,对于任何想学习 Manifest V3 工作原理、安全地在 MAIN 和 ISOLATED 上下文之间传输数据,以及被动指纹识别方法的人来说,这都是极好的学习材料。该项目采用 NPOSL-3.0 许可证,可在 Chrome 网上应用店获取。
相关项目