From 05301e8d5ffc1ec796262a687b16be5ac73a9843 Mon Sep 17 00:00:00 2001 From: BlueRose <378100977@qq.com> Date: Wed, 1 Apr 2026 12:30:06 +0800 Subject: [PATCH] vault backup: 2026-04-01 12:30:06 --- .../UnrealEngine/Hardness Game Development.md | 1 + .../WY/Website/Netease AITA ArtLib.md | 83 +++++++++- .../WY/Website/Netease AITA AuthBridge.md | 150 ++++++++++++++++++ 3 files changed, 233 insertions(+), 1 deletion(-) create mode 100644 07-Other/AI/AI Agent/WY/Website/Netease AITA AuthBridge.md diff --git a/07-Other/AI/AI Agent/UnrealEngine/Hardness Game Development.md b/07-Other/AI/AI Agent/UnrealEngine/Hardness Game Development.md index c89cfed..65557cd 100644 --- a/07-Other/AI/AI Agent/UnrealEngine/Hardness Game Development.md +++ b/07-Other/AI/AI Agent/UnrealEngine/Hardness Game Development.md @@ -15,6 +15,7 @@ - 通过蓝图转c++功能,让AI读懂蓝图 - IDE Debug MCP - https://km.netease.com/v4/section/aigc/detail/blog/263683 + - cpp-debugger-cli - Docker - Gitea:工单以及版本管理。 - OpenClaw:子节点部署,通过父节点进行控制。 diff --git a/07-Other/AI/AI Agent/WY/Website/Netease AITA ArtLib.md b/07-Other/AI/AI Agent/WY/Website/Netease AITA ArtLib.md index 28bbf26..7437240 100644 --- a/07-Other/AI/AI Agent/WY/Website/Netease AITA ArtLib.md +++ b/07-Other/AI/AI Agent/WY/Website/Netease AITA ArtLib.md @@ -17,4 +17,85 @@ https://www.fab.com/listings/bb7df0df-a2e7-430f-a382-7c3b121bf767 ## 部署方式 1. 该网站项目使用gitea托管,使用CI/CD进行生成与部署。 -2. 部署到同IP Nodejs Docker容器中。 \ No newline at end of file +2. 部署到同IP Nodejs Docker容器中。 + +--- + +在使用 **Claude Code** 或类似的 AI 开发工具编写爬取脚本时,绕过 Cloudflare 的核心在于**“去自动化特征”**。Cloudflare 的防护(如 5 秒盾、Turnstile)不仅检查你的 IP,还会深入分析你的浏览器指纹、TLS 握手以及行为模式。 + +以下是针对 2026 年技术环境,在 Claude Code 中实现避开风控的实战策略: + +### 1. 使用具备“隐身”能力的浏览器框架 + +传统的 Selenium 或普通的 Puppeteer 极易被识别。你应该指示 Claude Code 使用以下增强库: + +- **Playwright + Stealth 插件**:目前最主流的选择。 + +- **SeleniumBase (UC Mode)**:这是目前绕过 Cloudflare 最强的工具之一,其 `undetected-chromedriver` 模式能有效隐藏自动化痕迹。 + +- **npx Claude Code 提示词示例**: + + > "请使用 Python 的 SeleniumBase 库,并开启 UC Mode(Undetected Mode)编写爬取脚本,以绕过目标的 Cloudflare 检测。" + + +### 2. 模拟真实浏览器的指纹 + +Cloudflare 会检查你的 HTTP 请求头是否与底层的 TLS 握手特征匹配(例如,如果你自称是 Chrome 但 TLS 握手特征是 Python-requests,会被秒封)。 + +- **TLS 指纹模拟**:使用 `curl_cffi` 库,它可以模拟真实浏览器(如 Chrome 120+)的 TLS 握手特征。 + +- **请求头伪造**:确保 `User-Agent`、`Accept-Language`、`Sec-Ch-Ua` 等字段与真实浏览器完全一致。 + + +### 3. IP 质量与地理位置 + +即使代码再完美,数据中心的 IP(如 AWS, Google Cloud)也是 Cloudflare 的重点监控对象。 + +- **使用住宅代理(Residential Proxies)**:这些 IP 看起来像普通家庭用户。 + +- **轮换代理**:每次请求或每隔几次操作更换一次 IP。 + +- **IPv6 优先**:2026 年很多防护系统对 IPv6 的限制相对宽松,且资源更丰富。 + + +### 4. 绕过交互挑战 (CAPTCHA/Turnstile) + +当 Cloudflare 弹出验证码时,纯代码通常无法处理。 + +- **验证码识别服务**:在代码中集成如 CapSolver 或 2Captcha 的 API。 + +- **Cloudflare Workers 代理**:有时通过部署在 Cloudflare 内部的 Workers 作为跳板(利用其内部信任机制)会有奇效,但这取决于目标的具体配置。 + + +--- + +### 综合架构建议 + +|**维度**|**推荐技术栈**|**作用**| +|---|---|---| +|**底层驱动**|`SeleniumBase (UC Mode)` 或 `Playwright`|隐藏 WebDriver 特征| +|**网络请求**|`curl_cffi` (Python)|解决 TLS 指纹识别问题| +|**IP 资源**|动态住宅代理 (Residential Proxies)|绕过 IP 频率限制和黑名单| +|**行为模拟**|`B-Splines` 曲线模拟鼠标移动|模拟真人操作轨迹| + +### Claude Code 实战操作小贴士: + +在 Claude Code 终端中,你可以这样引导它: + +1. **第一步:环境检查**。先让它写一个简单的脚本访问 `https://nowsecure.nl`(这是一个专门测试 Cloudflare 绕过程度的网站)并截图。 + +2. **第二步:迭代优化**。如果截图显示被拦截,要求它:“目前的脚本被拦截了,请尝试集成 `stealth` 插件并随机化延迟时间。” + +3. **第三步:添加随机性**。 + + Python + + ``` + import time + import random + # 绝不要使用固定的 sleep(5) + time.sleep(random.uniform(2.5, 7.8)) + ``` + + +**重要提醒:** 爬取数据请务必遵守目标网站的 `robots.txt` 协议及当地法律法规。过度高频的爬取不仅会被封禁,还可能面临法律风险。 \ No newline at end of file diff --git a/07-Other/AI/AI Agent/WY/Website/Netease AITA AuthBridge.md b/07-Other/AI/AI Agent/WY/Website/Netease AITA AuthBridge.md new file mode 100644 index 0000000..8493802 --- /dev/null +++ b/07-Other/AI/AI Agent/WY/Website/Netease AITA AuthBridge.md @@ -0,0 +1,150 @@ +# 提示词 +请你说中文,并使用中文编写文档。 +我打算使用使用Nodejs构建一个MCP SSE服务器,帮助OpenClaw以及其他Agent进行OIDC认证。并且编写对应的Skill,协助Agent使用该MCP。MCP 服务器充当了 **OIDC Client** 和 **凭证管理器**。 + +OIDC相关文档在./docs/Netease_OIDC.md,里面的链接可能需要认证,你可以打开浏览器等待我来帮你认证。 +#### 核心流程步骤: +1. **触发**:Agent 在执行任务时发现需要访问 NetEase 内部接口。 +2. **调用 MCP**:Agent 调用 MCP 工具 `get_auth_url`。 +3. **生成状态**:MCP 生成一个随机 `state` 存入 MongoDB,并构建 OIDC 授权链接。 +4. **交互**: + - **方案 A (手动)**:Agent 将链接发给用户,用户点击。 + - **方案 B (自动化)**:使用类似 `browser-use` 的 Skill,由 Agent 直接控制浏览器打开该链接,并等待用户在弹出的窗口中完成 SSO 登录。 +5. **回调**:用户登录成功后,NetEase OIDC 重定向到 MCP 的 Fastify 接口。 +6. **换取 Token**:MCP 后端用 `code` 换取 JWT,并将其与用户信息绑定存入 MongoDB。 +7. **通知/轮询**:Agent 通过 MCP 轮询或 SSE 得到“认证成功”状态,随后获取 JWT 进行业务操作。 + +--- +### 2. 技术实现细节 +#### 2.1 数据库设计 (Mongoose) +主要用于维护认证状态和存储持久化的 Token。 +JavaScript +``` +// models/AuthState.js +const authStateSchema = new mongoose.Schema({ + state: { type: String, required: true, unique: true }, // 用于防止CSRF和匹配回调 + userId: { type: String, required: true }, // 对应 OpenClaw 的用户 ID + status: { type: String, enum: ['pending', 'completed'], default: 'pending' }, + accessToken: String, + idToken: String, + refreshToken: String, + expiresAt: Date, + createdAt: { type: Date, expires: '10m', default: Date.now } // 10分钟后自动过期 +}); +``` + +#### 2.2 MCP 服务器核心逻辑 (Fastify + SSE) +MCP 服务器需要同时支持 **SSE (与 Agent 通信)** 和 **HTTP (处理 OIDC 回调)**。 +- **MCP Tool: `get_netease_auth_url`** 输入:`userId` 输出:`authUrl`, `state` 逻辑:生成 OIDC URL,将 `state` 记录到 MongoDB。 +- **Fastify Route: `/api/callback`** 逻辑: + 1. 接收 `code` 和 `state`。 + 2. 校验 `state` 是否在 MongoDB 中存在。 + 3. 向 NetEase OIDC 换取 Token。 + 4. 更新 MongoDB 中的状态为 `completed`。 + 5. 通过 SSE 发送一个 `auth_success` 事件。 +#### 2.3 改进思路:自动化认证 (Browser-use 集成) +当 OpenClaw(服务器端)与用户(本地客户端)不在同一台电脑时,直接调用系统命令(如 `open` 或 `start`)只会打开服务器端的浏览器,用户完全看不到。 +既然你提到用户开启了 **Chrome 远程调试模式 (`--remote-debugging-port=9222`)**,我们可以利用 **CDP (Chrome DevTools Protocol)** 协议来实现跨机器的“远程操控”。 +以下是针对你的 Node.js MCP 服务器的技术实现方案: + +--- +##### 1. 核心架构:远程 CDP 连接 +要让运行在服务器上的 MCP 能够操控用户本地的 Chrome,流程如下: +###### 挑战:网络连通性 +通常用户的电脑处于内网(NAT 之后),服务器无法直接访问用户的 `9222` 端口。 +- **方案 A (内网直连)**:如果两者在同一公司内网且 IP 互通,MCP 直接访问 `http://:9222`。 +- **方案 B (内网穿透)**:使用 `frp` 或 `ssh -R`。用户本地运行一个穿透工具,将本地的 `9222` 映射到服务器可见的某个端口(如服务器的 `19222`)。 + +--- +##### 2. 技术实现:MCP 服务器代码 (Node.js) +在你的 Node.js 环境中,推荐使用 **Playwright**,因为它原生支持 `connectOverCDP`,非常适合这种场景。 + +###### 安装依赖 +```bash +npm install playwright +``` + +###### MCP 工具逻辑示例 +在 MCP 中编写一个 `open_remote_auth_page` 的工具: +```ts +import { chromium } from 'playwright'; + +async function openRemoteBrowser(userIp, authUrl) { + // 1. 连接到用户本地开启了调试模式的浏览器 + // 假设通过穿透或直连,地址为 userIp:9222 + const browser = await chromium.connectOverCDP(`http://${userIp}:9222`); + + // 2. 获取当前的上下文(通常是用户正开着的浏览器窗口) + const defaultContext = browser.contexts()[0]; + const page = await defaultContext.newPage(); + + // 3. 导航到 NetEase OIDC 认证页面 + await page.goto(authUrl); + + // 4. (可选) 监听 URL 跳转,自动化部分流程 + // 比如检测到跳转回 callback URL 时,自动告知 Agent + page.on('framenavigated', frame => { + const url = frame.url(); + if (url.includes('your-callback-url')) { + console.log('用户已完成认证!'); + // 这里可以触发 MongoDB 状态更新或 SSE 通知 + } + }); + + // 注意:不要执行 browser.close(),否则会关掉用户的整个 Chrome +} +``` + +--- +##### 3. 针对用户的操作指南 (Skill 配合) +为了让这个 Skill 成功运行,Agent 需要引导用户做两件事: +1. **启动 Chrome 调试模式**: 用户需要在本地终端执行: +```bash +# macOS +/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 +``` +2. **提供 IP/端口信息**: Agent 可以询问用户:“请提供你本地机器的 IP 地址(或内网穿透后的地址)”。 + +--- +##### 4. 更优雅的改进方案:WebRTC 或轻量级“领航员” +如果让用户手动输入 IP 比较繁琐,你可以编写一个 **“Claw-Bridge”**(一个几十行代码的本地 Node.js 脚本或 Go 小程序): +- **工作原理**: + 1. 用户在本地运行 `Claw-Bridge`。 + 2. `Claw-Bridge` 启动后通过 WebSocket 连接到你的 Fastify 服务器(建立长连接)。 + 3. 当 MCP 需要打开网页时,向该 WebSocket 发送指令。 + 4. `Claw-Bridge` 在用户本地执行 `open `。 + +**优点**: +- **无需开启远程调试端口**(安全性更高,不会暴露浏览器的控制权给整个网络)。 +- **无需固定 IP**(只要有网络,长连接就能通)。 +- **权限最小化**:本地程序只负责“打开链接”,不涉及控制浏览器内部。 +##### 5. 总结建议 +- 如果你追求**深度自动化**(比如想让 Agent 帮用户自动填表):使用 **Playwright + CDP**。 +- 如果你只追求**方便用户点击**(仅仅是弹出一个认证页):编写一个轻量级的 **本地桥接脚本** 配合你的 Fastify 服务器,通过 WebSocket 转发“打开页面”的请求。 +--- +### 3. MCP Skill (工具定义) 示例 +在 MCP 服务器中定义的工具描述: +``` +{ + "name": "authenticate_netease", + "description": "当需要访问网易内部服务但未授权时使用。该工具会返回一个认证链接,必须引导用户完成认证。", + "inputSchema": { + "type": "object", + "properties": { + "user_id": { "type": "string", "description": "当前用户的唯一标识" } + }, + "required": ["user_id"] + } +} +``` + +--- +### 4. 安全建议 +1. **PKCE (Proof Key for Code Exchange)**:既然是 Node.js 后端,务必开启 PKCE。在生成授权链接时生成 `code_verifier` 并存储在 MongoDB,回调时带上。 +2. **JWT 验证**:使用 `fastify-jwt` 验证从 OIDC 拿到的 `id_token` 的签名,确保其确实来自网易的认证服务。 +3. **State 绑定**:确保回调时的 `state` 只能被使用一次,防止重放攻击。 +4. **环境隔离**:建议在 MongoDB 中区分开发环境和生产环境的 `client_id`。 +## 技术选型 +我打算使用: +后端技术:nodejs、Fastify、Mongoose、fastify-jwt +数据库:MongoDB