Files

7.2 KiB
Raw Permalink Blame History

高强度浏览器环境检测通用排查指南

本文件用于从 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 逻辑问题。