309 lines
7.3 KiB
Markdown
309 lines
7.3 KiB
Markdown
# 当前补环境草稿的遗漏点
|
||
|
||
这份文档不是重新讲补环境,而是专门检查当前 `H:\CodeSpace\AiReverse\Web\env\codex` 这套草稿资源还缺什么。
|
||
|
||
结论先说:
|
||
|
||
- 现在已经有“原型链 / native / 描述符 / navigator / document / storage / 指纹 / Proxy”的主骨架
|
||
- 但如果目标是未来真的做成可复用 skill,仍然缺一批高频检测点、配套脚本和验证资源
|
||
- 这些遗漏里,最关键的不是再补几个字段,而是补“跨对象关系、异步对象、网络对象、时序与指纹一致性”
|
||
|
||
## 1. 当前草稿已经覆盖到的重点
|
||
|
||
现有文档和脚本已经比较明确地覆盖了:
|
||
|
||
- 原型链分层
|
||
- native `toString`
|
||
- getter / setter / 描述符保护
|
||
- `navigator`
|
||
- `document`
|
||
- `localStorage` / `sessionStorage`
|
||
- `canvas` / `WebGL`
|
||
- Proxy 吐环境
|
||
- `document.all`
|
||
- 堆栈清洗的设计入口
|
||
|
||
这部分作为 future skill 的第一层基础已经够用了。
|
||
|
||
## 2. 目前最重要的遗漏点
|
||
|
||
### 2.1 `window` 图关系还不完整
|
||
|
||
当前草稿里虽然提到了 `window/globalThis/self/top`,但还没有把下面这些关系单独模块化:
|
||
|
||
- `window.window === window`
|
||
- `self === window`
|
||
- `top / parent / frames`
|
||
- `frameElement`
|
||
- `opener`
|
||
- `document.defaultView`
|
||
|
||
这类点一旦补错,经常不是直接报错,而是通过一致性检测暴露。
|
||
|
||
### 2.2 事件系统还是空白区
|
||
|
||
现在还缺:
|
||
|
||
- `EventTarget`
|
||
- `Event`
|
||
- `UIEvent`
|
||
- `MouseEvent`
|
||
- `KeyboardEvent`
|
||
- `PointerEvent`
|
||
- `TouchEvent`
|
||
- `CustomEvent`
|
||
- `MessageEvent`
|
||
|
||
更重要的是缺这些行为细节:
|
||
|
||
- `isTrusted`
|
||
- `timeStamp`
|
||
- `target/currentTarget/srcElement`
|
||
- `addEventListener/removeEventListener/dispatchEvent`
|
||
|
||
很多风控和验证码环境,不是直接查 `navigator`,而是顺着事件系统走。
|
||
|
||
### 2.3 网络与通信对象几乎还没进草稿
|
||
|
||
当前最明显的遗漏之一就是:
|
||
|
||
- `XMLHttpRequest`
|
||
- `fetch`
|
||
- `Headers`
|
||
- `Request`
|
||
- `Response`
|
||
- `sendBeacon`
|
||
- `WebSocket`
|
||
- `EventSource`
|
||
|
||
你前面已经明确提过 `WebSocket`,但目前这套草稿里还没有把它真正升格成模块。
|
||
|
||
这会影响:
|
||
|
||
- 某些 cookie / token 写入链
|
||
- 某些 socket 协议站点
|
||
- 某些通过 `fetch/xhr` 挂钩的风控
|
||
|
||
### 2.4 Worker 只被提到了,但没形成模块
|
||
|
||
现在还缺完整设计:
|
||
|
||
- `Worker`
|
||
- `SharedWorker`
|
||
- `ServiceWorker`
|
||
- `postMessage`
|
||
- `MessageChannel`
|
||
- `BroadcastChannel`
|
||
- `structuredClone`
|
||
|
||
尤其是国外盾和新型验证码,越来越喜欢把检测逻辑拆进 Worker。
|
||
|
||
## 3. 指纹层面的明显遗漏
|
||
|
||
### 3.1 音频指纹还没单列
|
||
|
||
当前草稿重点放在 `canvas/WebGL`,但缺:
|
||
|
||
- `AudioContext`
|
||
- `OfflineAudioContext`
|
||
- `AudioBuffer`
|
||
- 常见音频指纹链路
|
||
|
||
这点在新型验证码和国外风控里非常常见。
|
||
|
||
### 3.2 字体指纹还没单列
|
||
|
||
当前文档里虽然提到“字体”,但还没有形成独立模块。
|
||
|
||
应该至少考虑:
|
||
|
||
- 浏览器侧字体枚举导出
|
||
- 文本测量差异
|
||
- `canvas` 字体渲染一致性
|
||
|
||
### 3.3 WebRTC 还没进入模块清单
|
||
|
||
目前还缺:
|
||
|
||
- `RTCPeerConnection`
|
||
- `RTCRtpSender`
|
||
- `RTCRtpReceiver`
|
||
- 相关候选、能力和属性检测
|
||
|
||
这类点不一定每个站都用,但一旦碰到就是高优先级。
|
||
|
||
### 3.4 `Math` / 引擎精度差异没有单独建模
|
||
|
||
现在草稿里还没有明确:
|
||
|
||
- 浏览器与 Node 的 `Math` 精度差异
|
||
- 不同引擎浮点实现差异
|
||
|
||
这点在高级风控和 wasm/验证码里会被拿来做环境分辨。
|
||
|
||
## 4. 浏览器能力对象的遗漏
|
||
|
||
下面这批对象在当前草稿里还比较弱或者没展开:
|
||
|
||
- `permissions.query`
|
||
- `Notification.permission`
|
||
- `mediaDevices`
|
||
- `enumerateDevices`
|
||
- `getUserMedia`
|
||
- `clipboard`
|
||
- `geolocation`
|
||
- `Bluetooth`
|
||
- `USB`
|
||
- `HID`
|
||
- `serial`
|
||
- `xr`
|
||
|
||
原因不是它们每次都必须补,而是:
|
||
|
||
- 很多站点会把它们当“是否为真浏览器”的探针
|
||
- 很多国外站点喜欢同时读多个能力对象做一致性判断
|
||
|
||
## 5. 时间、地区、编码对象的遗漏
|
||
|
||
这一块目前也不够:
|
||
|
||
- `Intl`
|
||
- 时区
|
||
- `Date`
|
||
- `performance`
|
||
- `performance.now`
|
||
- `performance.timeOrigin`
|
||
- `navigation timing`
|
||
- `TextEncoder`
|
||
- `TextDecoder`
|
||
- `atob`
|
||
- `btoa`
|
||
- `URL`
|
||
- `URLSearchParams`
|
||
- `crypto.getRandomValues`
|
||
- `crypto.subtle`
|
||
|
||
如果 future skill 以后要更稳,这些不能长期缺位。
|
||
|
||
## 6. DOM 结构与样式系统的遗漏
|
||
|
||
当前 `document` 方向有骨架,但还缺完整 DOM 系统设计:
|
||
|
||
- `Node`
|
||
- `Element`
|
||
- `HTMLElement`
|
||
- `HTMLDivElement`
|
||
- `HTMLCanvasElement`
|
||
- `DOMParser`
|
||
- `XMLSerializer`
|
||
- `MutationObserver`
|
||
- `CSSStyleDeclaration`
|
||
- `classList`
|
||
- `dataset`
|
||
- `style`
|
||
- `getAttribute/setAttribute`
|
||
|
||
很多补环境失败并不是 BOM 对象缺,而是 DOM 返回值长得不像真浏览器。
|
||
|
||
## 7. 现有脚本本身的遗漏
|
||
|
||
### 7.1 `collect-browser-env.js` 采集面还不够
|
||
|
||
现在它能采集:
|
||
|
||
- `navigator`
|
||
- `document`
|
||
- `screen`
|
||
- `history`
|
||
- `location`
|
||
- `storage`
|
||
- 基础 `canvas/webgl`
|
||
|
||
但还没采:
|
||
|
||
- `plugins`
|
||
- `mimeTypes`
|
||
- `permissions`
|
||
- `Notification.permission`
|
||
- `mediaDevices`
|
||
- `battery`
|
||
- `AudioContext`
|
||
- 字体样本
|
||
- `performance`
|
||
- `Intl/timezone`
|
||
- `document.all` 特征
|
||
|
||
### 7.2 `observe-runtime.js` 还偏轻量
|
||
|
||
现在能做基础 Proxy 观察,但还不够:
|
||
|
||
- 缺路径频次统计
|
||
- 缺按对象分类的聚合结果
|
||
- 缺“读取返回 undefined”与“调用抛错”联动分析
|
||
- 缺输出到 JSON 的稳定格式
|
||
- 缺针对 `apply/construct` 的细化报告
|
||
|
||
### 7.3 `protect-native.js` 还只是底座雏形
|
||
|
||
现在能做:
|
||
|
||
- `Function.prototype.toString`
|
||
- getter / setter 基础保护
|
||
- `name` / `length` 修正
|
||
|
||
但还没做全:
|
||
|
||
- `prototype` 描述符修正
|
||
- `Symbol.toStringTag` 联动
|
||
- 针对 Proxy 包裹后函数的处理
|
||
- 多层包装后的 native 串一致性
|
||
|
||
## 8. blueprint 里提到但尚未补齐的资源
|
||
|
||
当前 blueprint 里已经提到,但实际文件还没有落地的有:
|
||
|
||
### 8.1 `references`
|
||
|
||
- `03-special-cases.md`
|
||
- `07-source-map.md`
|
||
- `06-validation.md`
|
||
|
||
### 8.2 `scripts`
|
||
|
||
- `build-plugin-graph.js`
|
||
- `merge-storage-state.js`
|
||
- `scaffold-module.js`
|
||
|
||
### 8.3 `assets`
|
||
|
||
- `navigator-sample.example.json`
|
||
- `plugin-graph.example.json`
|
||
- `storage-state.example.json`
|
||
|
||
这说明现在的草稿已经到了“该从设计走向半成品”的阶段。
|
||
|
||
## 9. 最该优先补的遗漏顺序
|
||
|
||
如果按未来 skill 的实用性排序,我建议优先级如下:
|
||
|
||
1. `window/self/top/parent/defaultView/opener` 一致性
|
||
2. `WebSocket` / `fetch` / `XMLHttpRequest`
|
||
3. `Worker` / `SharedWorker` / `postMessage`
|
||
4. `permissions` / `mediaDevices` / `Notification`
|
||
5. `AudioContext` / 字体指纹 / `WebRTC`
|
||
6. `Intl` / `performance` / `crypto`
|
||
7. 完整 DOM / Event 系统
|
||
|
||
## 10. 当前最稳的判断
|
||
|
||
现在这套 `codex` 目录已经不再是“零散笔记”,而是一套成型中的 skill 设计草稿。
|
||
|
||
但如果要迈过“能跑 Demo”到“能抗检测”的门槛,后续最应该补的不是更多 `navigator.xxx = ...`,而是:
|
||
|
||
- 跨对象关系
|
||
- 异步与通信对象
|
||
- 网络对象
|
||
- 时间与地区一致性
|
||
- 音频 / 字体 / WebRTC 等更深层指纹
|
||
- 验证与回归资源
|