Cloudflare五秒盾补环境分析

本文内容仅限于学术研究和技术讨论,实际应用中应严格遵守相关法律法规和服务条款。本文内容遵守CC BY-NC-ND 4.0协议,禁止任何修改后二次传播。

欢迎访问博客浏览更多内容:Cloudflare五秒盾补环境分析 – 编程技术杂谈

一.认识5s盾

在正式开始对五秒盾进行分析之前,我们先来了解一下如何简单的判断是不是五秒盾。 第一种方式便是通过网页显示的图片进行判断,当你在网页上看见下图时,那大概率就是遇到五秒盾了。

当然,因为五秒盾是存在 Invisible 模式,即无感模式的,因此在某些情况下即便没有看见上面的图片也有可能遇到五秒盾,下面会讲一些其他的判断方式。

  • python requests请求返回 html 出现 “Just a moment…”
  • 网页 cookie 中存在 cf_clearance 字段
  • 五秒盾进行校验时发送的请求存在 https://challenges.cloudflare.com/cdn-cgi/challenge-platform 特征

二.请求流程拆解

本次五秒盾请求流程拆解使用的是 cookie 类型作为样例,其余类似无感和token类型的五秒盾,在请求流程上对比cookie的流程大多只是做了一定的删减。

最后服务器返回的 set-cookie 中包含 cf_clearance 字段就是验证通过了。

1. 第一个请求——首页返回403

请求首页返回的html最重要的就是这段js代码,后续流程中会使用到 _cf_chl_opt 中的 cRay、cH、md等字段。

2.第二个请求——第1个js文件

当首页代码执行完毕后便会请求第一个 js 文件,在这个 js 文件中会进行一定的 dom 操作,然后将获取的值进行 JSON.stringify 转换然后再编码后通过 post 请求发送出去。

请求链接类似于下面这种:

https://网站域名/cdn-cgi/challenge-platform/h/b/orchestrate/chl_page/v1?ray=92f9047e7ecb2f41

其中ray便是首页 html 中的 _cf_chl_opt.cRay 的值。

3.第三个请求 —— 第1个post请求

下图就是 JSON.stringify 转换的内容。

4.第四个请求——normal请求

紧接着我们会来到第二个 html 请求:

https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/turnstile/if/ov2/av0/rcv/wu5a7/0x4AAAAAAAAjq6WYeRDKmebM/light/fbE/new/normal/auto/

在这个请求中 0x4AAAAAAAAjq6WYeRDKmebM 相当于网站的 key,是固定的。

在normal页面中,最重要的值和首页请求的值一样,都是 window._cf_chl_opt,不过需要注意的是,虽然他们都是 window._cf_chl_opt,但是其中的字段确实千差万别,千万要注意分开保存下来,不要覆盖了。

4.第五个请求——第2个js文件

https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/orchestrate/chl_api/v1?ray=92f90b53fd3a28f3&lang=auto

这一部分没什么好说的,就是获取 js 代码,然后执行环境检测的主要代码。

5.第六个请求—— 第2个 post 请求

这里和第一个 js 文件一样,在经过一系列比之前更为繁杂的 dom 操作以后,使用 JSON.stringify 将对象转化后进行编码然后发送,返回的值进行解码后便是进行环境检测和环境字典的代码了。

可以看到,对象里面有部分值就是 normal 页面获取的 window._cf_chl_opt 的值,同时还有一部分值其实和第一个 js 文件发送 post 请求返回后的结果有关。

6.第七个请求——环境字典

这一部分就是整个 5s 盾里面最主要、最核心的一块,他检测了包括并不限于浏览器的 dom 、window、navigator、location等等环境,然后生成一个环境对象,将环境对象进行编码后通过 post 请求发送给服务器进行检测,如果通过了,那么返回 response 的长度就会大于1000并小于10000,如果长度小于1000那就是环境值有问题,如果长度大于10000,那就需要进行点击操作了。

这些字段便是环境检测的结果。

同时,再这一步里面还会发送一个 fetch 请求和一个 image 请求,先后顺序是不固定的,image 请求结果的图片宽高时会用到环境监测结果中的。

7.最后一个请求——获取cookie字段cf_clearance

当前面的校验通过后,这里就会携带者请求结果返回第一个js文件中,发送最后一个请求 ,去获取cookie字段cf_clearance。

三、结果展示 结果肯定是嘎嘎跑

### 关于 'cache-loader' 模块未找到的解决方案 当遇到 `Syntax Error: Error: Cannot find module 'cache-loader'` 错误时,通常是因为某些依赖项未能正确安装或存在版本兼容性问题。以下是针对该问题的具体分析和解决方法: #### 1. 删除现有依赖并重新安装 由于部分依赖可能未完全下载或配置失败,建议清理当前环境中的依赖文件,并重新执行安装操作。 - **删除旧依赖** 进入项目根目录,运行以下命令以移除现有的 `node_modules` 文件夹以及锁定文件: ```bash rm -rf node_modules package-lock.json ``` - **重新安装依赖** 使用以下命令重新拉取所有必要的模块: ```bash npm install ``` 此过程会依据 `package.json` 配置自动解析所需依赖关系[^3]。 #### 2. 处理高版本 Node.js 和 NPM 的兼容性问题 如果使用的 Node.js 或 NPM 版本较高,则可能会触发上游依赖冲突的情况。此时可以通过指定参数来忽略此类警告并强制完成安装流程。 - 执行带选项的安装指令: ```bash npm install --legacy-peer-deps ``` 上述命令能够有效规避因新策略引入而导致的部分历史遗留库无法匹配的问题[^4]。 #### 3. 明确目标加载器及其关联插件的状态 确认是否遗漏了其他间接影响到构建链路的关键组件(例如 `sass-loader`, `style-loader`)。对于特定场景下的样式表预处理工具缺失情况也需要同步关注[^1]。 通过上述措施基本可以消除由缓存机制引发的相关异常状况;当然,在实际开发过程中还应定期更新全局管理软件至最新稳定版次从而减少不必要的麻烦发生几率。 ```javascript // 示例代码片段展示如何验证已修复后的服务端渲染功能是否恢复正常工作状态。 const express = require('express'); const path = require('path'); let app = express(); app.use(express.static(path.join(__dirname, './dist'))); app.listen(8080,function(){ console.log("Server is running on port 8080..."); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值