Files

90 lines
7.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 高强度浏览器环境检测通用排查指南
本文件用于从 Cloudflare / Turnstile / Akamai / DataDome / Kasada / Shape / F5 等高强度检测样本中抽象通用补环境要求。它不是任何厂商的专用绕过流程,也不用于生成或伪造 challenge、验证码、访问控制 Cookie 或第三方防护 token;只用于授权范围内的网页端 Node.js 补环境、取证一致性检查和最终请求链验证。
## 触发条件
出现以下任一现象时读取本文件,并把结论写入阶段报告:
- HTTP 403 / 429 / 503、challenge 页面、security check、bot block、verify、captcha、WAF / risk control 页面。
- HTML 中注入 challenge / detection / telemetry / fingerprint 脚本,或目标 API 依赖入口页 Cookie、Storage、seed、nonce、动态 JS。
- 目标 JS 访问大量环境 API、指纹 API、自动化检测 honeypot,或 trace 中 API 类别分散。
- 单独请求 API 失败,但真实浏览器从入口页访问后成功。
- 请求成功依赖 UA / Client Hints / CookieJar / Storage / TLS / 代理 / 请求顺序一致。
## 非目标
不得把本文件解释为:
- 生成或伪造 `cf_clearance`、`__cf_bm`、验证码 token、Turnstile token、设备校验 token 或访问控制凭证。
- 自动破解验证码、绕过登录、绕过 MFA 或绕过访问控制。
- 把浏览器自动化作为最终交付项目的一部分。
- 主动分析 JSVMP opcode / 字节码源码;遇到 JSVMP 只围绕环境调用、writer、行为 diff 和请求链推进。
## 高强度检测面总览
| 类别 | 重点排查 | 通用处理原则 |
|---|---|---|
| 环境真实性 | 原型链、属性描述符、getter/setter、非法构造、brand check、枚举顺序、Error stack、DataCloneError、toString 多通道 | 按 `env-object-model.md`、`env-native-protection.md`、`addon-api.md`,addon-first / xbs native-first |
| 指纹值 | Canvas、WebGL、WebGPU、Audio、Speech、Fonts、DOM geometry、Permissions、Plugins、MimeTypes、MediaDevices、WebRTC、screen、UA-CH | `fingerprint-value-replay.md`:Trace 未截断优先,截断 / 缺失则真实浏览器采样,禁止 AI 猜值和随机化 |
| 自动化痕迹 | `navigator.webdriver`、Selenium / PhantomJS / NightmareJS / ChromeDriver 痕迹、CDP / DevTools 侧信道、headless 差异、`isTrusted` | 从第一次取证起使用用户确认的 ruyiPage / Camoufox / CloakBrowser / 手动浏览器,固定 baseline |
| 浏览器状态 | Cookie、localStorage、sessionStorage、IndexedDB、Cache、ServiceWorker、权限状态、visibility、focus、history | 入口页优先,记录生成 / 刷新链路,不把过期状态误判为补环境失败 |
| 网络一致性 | TLS JA3/JA4、HTTP/2、Header 顺序、Accept-Encoding、UA、UA-CH、Sec-Fetch、Referer、Origin、Accept-Language、代理地区 | `tls-request-validation.md` + `session-request-chain.md`,最终请求使用 Session + TLS 指纹兼容客户端 |
| 请求链与时序 | 入口 HTML、动态 JS、检测脚本、前置接口、目标 API、请求间隔、Cookie 变化 | 不孤立重放单个 API,保存 request-chain manifest 与失败排查结论 |
## 入口页优先原则
高强度检测下,单个 API cURL 通常不是完整状态来源。进入补环境前必须确认:
1. 入口 HTML URL 与目标 API URL 的关系。
2. 入口页是否注入检测脚本、动态 seed、nonce、challenge 资源或 Set-Cookie。
3. 目标 API 是否依赖入口页产生的 Cookie / Storage / JS runtime 状态。
4. 是否存在动态 HTML / JS 资源过期风险,必要时按 `dynamic-resource-freshness.md` 在最终入口运行时刷新。
5. 如果用户只提供 API cURL 且返回风控 / challenge,应暂停要求入口页、HAR、浏览器取证证据或用户确认无法提供,不得直接盲补 API 参数。
## 指纹值不能随机化
高强度检测中,随机化或伪装不一致的 Canvas / WebGL / Audio / 字体 / DOM 几何结果,可能比固定真实值更容易暴露。硬性规则:
- 不使用 `Math.random()`、时间戳、机器默认值或 AI 经验生成指纹结果。
- 不把 `node-canvas`、`headless-gl`、`jsdom` 等 Node 模拟库结果当最终真实值。
- 不每次取证生成一套新 UA / 语言 / 时区 / screen / WebGL / Canvas / Audio 指纹。
- 优先 RuyiTrace / trace 未截断值;trace 缺失、未覆盖或疑似截断时,用用户确认的取证工具在同一 `baselineId` 下采样。
- 每条 fixture 记录 `source / capturedBy / traceStatus / baselineId / valueLength / hash / truncated`。
## 自动化与 CDP 风险清单
取证阶段出现以下信号时,不要继续普通自动化路径,应回到 `browser-acquisition.md` 重新确认工具和 baseline:
- `navigator.webdriver`、`window._selenium`、`window.callSelenium`、`window.callPhantom`、`window._phantom`、`window.__nightmare`、`window.domAutomation`、`window.domAutomationController`。
- `HeadlessChrome` UA、无插件 / 无 mimeTypes / permissions 异常、WebGL / Canvas 被隐私插件随机化或伪装。
- CDP / DevTools / Runtime 侧信道、异常 `console` / stack 行为、被页面检测到调试器或自动化 hook。
- 普通 `dispatchEvent` 产生 `isTrusted=false`,或鼠标 / 键盘 / 拖拽轨迹不可信。
- Profile 为空导致 Cookie / Storage / 权限状态缺失,或每次启动工具重新随机指纹。
## 高强度失败排查顺序
遇到最终请求失败、参数不一致、403 / 429 / 风控页、静默失败时,按以下顺序排查,不要直接反复改补环境代码:
1. 是否拿到 challenge / 风控页而非业务页。
2. 是否缺少入口 HTML、前置 JS、检测脚本或前置接口请求。
3. Cookie / Storage / device token / challenge 状态是否过期、缺失或不属于同一 session。
4. UA、UA-CH、Accept-Language、timezone、locale、screen、WebGL、Canvas、代理 / IP 是否与取证 baseline 一致。
5. TLS JA3/JA4、HTTP/2、Header 顺序、Sec-Fetch、Referer、Origin 是否与浏览器取证链一致。
6. fingerprint fixture 是否混用 baseline,trace 中长字段是否被截断。
7. Canvas / WebGL / WebGPU / Audio / Speech / Fonts / DOM geometry / Permissions / Plugins / MimeTypes 是否缺失真实样本或被随机化。
8. 取证阶段是否暴露 webdriver / CDP / headless / isTrusted 风险。
9. 请求顺序、请求间隔、Cookie jar 回写、动态资源刷新是否完整。
10. 以上排除后,再判断目标 JS 补环境对象、入口、writer 或 signer 逻辑是否缺失。
## 输出要求
阶段报告、`case/notes/high-intensity-env-diff.md`、`case/notes/final-request-validation.md` 和最终总结至少记录:
- 是否触发高强度检测通用排查,触发证据是什么。
- 入口页、目标 API、动态资源、Cookie / Storage、请求链是否完整。
- 指纹 baseline 与 fixture 来源,是否存在随机化、猜值或 trace 截断。
- 自动化 / CDP / headless / isTrusted 风险检查结果。
- TLS / Header / Client Hints / Session 请求链一致性检查结果。
- 失败排查顺序执行结果,以及最终认为是环境问题、请求链问题、状态过期、取证工具问题还是目标 JS 逻辑问题。