# 案例：window 蜜罐

## 目标
- 识别页面对 `window`/`document`/`navigator` 的探针访问路径。
- 在不破坏业务主流程的前提下，做最小补丁通过检测。

## 常见蜜罐类型
- 存在性探针：`if (window.chrome && window.chrome.runtime)`
- 描述符探针：`Object.getOwnPropertyDescriptor(...)`
- 原型链探针：`instanceof`, `constructor.name`
- 一致性探针：`innerWidth/outerWidth/screen` 联动校验
- 行为探针：函数 `toString`、错误栈、调用时序

## 流程
1. 观测优先
- 用 hook 记录属性访问链：谁在读、何时读、读了什么。
- 先收集失败样本，再决定补丁点。

2. 分组定位
- 按探针类别分组：存在性/描述符/原型链/行为。
- 每组只选一个最早触发点作为 first divergence。

3. 单字段补丁
- 每次只补一个字段或一个描述符。
- 补丁后立刻复测，确认影响面。

4. 回归验证
- 验证检测通过。
- 验证目标业务请求未回归（参数与状态码正常）。

## 补丁策略
- 优先“返回真实分布值”，避免硬编码魔法常量。
- 优先“只读补丁”，尽量不改写业务函数。
- 仅在必要时注入 preload 脚本，避免时序丢失。

## 失败回退
- 补丁导致新探针触发：回滚最近补丁，改走更早触发点。
- 行为不一致：检查 `toString`、`name`、`length` 描述符是否露馅。

## 输出产物
- `probe-paths.json`：访问路径与触发顺序
- `patch-log.md`：每次补丁内容、结果、回滚记录
- `verify.md`：检测结果 + 业务请求结果

## 安全要求
- 不提交真实会话数据。
- 不提交可直接针对特定站点复用的完整补丁脚本。
