## 已有防御推翻（Kill Mandate）

> 你的目标是推翻缺陷报告。只有找到确凿的代码证据才能推翻。
> 核心问题：detection 报出了漏洞或缺陷，但代码中已有有效的防御机制被忽略。包括手动编写的防御和框架内置的防御。

### 适用场景

- 安全漏洞相关缺陷（注入、XSS、路径穿越、SSRF、CSRF、反序列化）
- 并发问题相关缺陷（竞态条件、数据竞争）
- 异常处理相关缺陷（未捕获异常、异常信息泄露）
- 资源管理相关缺陷（资源泄漏、连接未关闭）

### 推翻流程

1. **定位防御位置**：在 Source→Sink 路径上（安全漏洞）或问题代码周围搜索防御机制
2. **评估防御有效性**：白名单+类型转换通常有效；黑名单替换容易绕过
3. **判定**：找到有效防御 → Kill；防御可绕过 → 未推翻；无防御 → 未推翻

### 推翻模式

#### 安全防御

| 防御类型 | 搜索命令 | 有效性判断 |
|---------|---------|-----------|
| 输入验证 | `Grep` 搜索 `whitelist`/`allowedValues`/`enum`/`zod`/`joi`/`class-validator` | 白名单 + 类型转换 → 有效 → Kill |
| 参数化查询 | `Read` 检查查询语句是否使用参数化：`db.query("... WHERE id = ?", [id])`、ORM `.where({field: value})` | 参数化 → 有效 → Kill |
| 输出编码 | `Grep` 搜索 `escapeHtml()`/`encodeURIComponent()`/`encodeForHTML()`/`DOMPurify.sanitize()` | 知名库编码 → 有效 → Kill |
| 净化函数 | `Grep` 搜索 `sanitize()`/`escape()`/`strip_tags()` | 知名库（DOMPurify、Bleach）→ 有效；自定义正则 → 需判断 |

**工具链**：
- 安全漏洞：先 `Read` 获取 Source→Sink 完整路径，再 `Grep` 在路径上搜索防御

#### 并发防御

| 防御类型 | 搜索命令 | 有效性判断 |
|---------|---------|-----------|
| 锁机制 | `Grep` 搜索 `synchronized`/`Lock`/`ReentrantLock`/`mutex`/`RLock`/`sync.Mutex` | 保护了竞态区域 → Kill |
| 原子操作 | `Grep` 搜索原子更新：`UPDATE ... SET count = count - 1`、`INCR`/`DECR`/`SETNX` | 操作原子化 → Kill |
| 乐观锁 | `Grep` 搜索 `@Version`/`version` 字段/CAS 操作 | 乐观锁覆盖 → Kill |

#### 异常处理防御

| 防御类型 | 搜索命令 | 有效性判断 |
|---------|---------|-----------|
| 全局异常处理器 | `Grep` 搜索 `@ControllerAdvice`/`@ExceptionHandler`/`app.use((err, req, res, next) =>`/`ErrorHandler` | 全局捕获 → Kill |
| 补偿/回滚逻辑 | `Grep` 搜索 `rollback`/`compensate`/`undo`/`revert` | 补偿覆盖所有失败路径 → Kill |
| finally 清理 | `Read` 检查 `finally` 块中的清理逻辑 | finally 覆盖 → Kill |

#### 资源管理防御

| 防御类型 | 搜索命令 | 有效性判断 |
|---------|---------|-----------|
| try-with-resources | `Grep` 搜索 `try (` + 资源声明 | 自动关闭 → Kill |
| using 声明 | `Grep` 搜索 `using (`/`using var` | 自动 Dispose → Kill |
| defer 释放 | `Grep` 搜索 `defer ` + 资源释放调用 | 延迟释放 → Kill |
| RAII/智能指针 | `Grep` 搜索 `std::unique_ptr`/`std::shared_ptr`/`std::make_unique` | 析构自动释放 → Kill |

#### 框架内置防御

框架自动提供的安全防护，detection 经常忽略：

| 框架防御 | 识别方法 | 判定 |
|---------|---------|------|
| React JSX 自动转义 | `Read` 检查是否使用 JSX 语法 `{variable}`（非 `dangerouslySetInnerHTML`） | JSX 默认转义 → Kill |
| Vue 模板自动转义 | `Read` 检查是否使用 `{{ variable }}`（非 `v-html`） | 模板默认转义 → Kill |
| Angular 自动转义 | `Read` 检查是否使用 `{{ variable }}`（非 `[innerHTML]` + `DomSanitizer`） | 默认转义 → Kill |
| ORM 自动参数化 | `Read` 检查 ORM 使用方式（Sequelize/TypeORM/Hibernate 的标准查询） | ORM 参数化 → Kill |
| 连接池自动管理 | `Read` 检查连接池配置（归还而非关闭） | 连接池管理 → Kill |
| 框架事务管理 | `Grep` 搜索 `@Transactional`/`@transactional`/`atomic()` 且确认在 Service 层生效 | 框架事务 → Kill |
| CSRF 防护 | `Grep` 搜索 CSRF token 机制（Spring Security、Django CSRF middleware） | 框架 CSRF → Kill |
| 安全中间件 | `Grep` 搜索 `helmet()`/`Django security middleware`/`CSP headers` | 安全中间件 → Kill |

### 推翻判定规则

- **Kill 条件**：在问题路径上找到有效的防御机制，且该防御确实能阻止缺陷触发
- **未推翻条件**：未找到防御，或找到的防御可被绕过（如黑名单替换、部分参数化）
- **降级 Kill**：防御仅在特定条件下有效（如需要管理员权限触发）→ 降级严重程度而非 Kill

### 降级策略

- 工具不可用时，仅基于已读取的代码上下文判断
- 无法确认防御有效性时，标记"防御未完全验证"，该策略判定为"未推翻"
