# PRD 需求文档 — 安全测试模块 P1 待办任务

> **文档版本**: v1.0
> **创建日期**: 2026-07-22
> **作者**: Claude
> **状态**: 待评审

---

## 一、需求背景

根据 `HANDOFF_安全测试.md` 的待办清单，安全测试模块有 2 个 P1 优先级任务待完成：

1. **前端报告中心适配安全报告** — 当前 Reports.vue 仅支持 UI 自动化报告（iframe 预览 HTML），需增加对安全测试 Markdown 报告的渲染支持
2. **补充 API3/4/6/7/9/10 安全测试用例** — 当前仅覆盖 24 个用例，缺失 API3/4/6/7/9/10 模块的用例

---

## 二、需求详情

### 需求 1：前端报告中心适配安全报告

#### 2.1.1 当前状态

- `frontend/src/views/Reports.vue` 是通用的报告展示页面
- 通过路由参数 `case_type` 区分不同类型报告（`ui` / `security`）
- 当前实现使用 `iframe` 预览 HTML 报告
- 安全测试报告后端 API 已就绪：
  - `GET /api/security/executions/{execution_id}/report` — 返回 Markdown 内容
  - `GET /api/security/executions/{execution_id}/report/download` — 下载 .md 文件

#### 2.1.2 功能需求

| 需求项 | 说明 |
|--------|------|
| **FR1.1** | 在 Reports.vue 中识别 `case_type='security'` 类型 |
| **FR1.2** | 当 `case_type='security'` 时，调用安全测试报告 API 获取 Markdown 内容 |
| **FR1.3** | 使用 Markdown 渲染库（如 `marked` 或 `markdown-it`）渲染报告内容 |
| **FR1.4** | 渲染后的报告样式需适配现有报告页面风格（深色/浅色主题） |
| **FR1.5** | 支持"下载报告"功能，调用 `/api/security/executions/{id}/report/download` |
| **FR1.6** | 报告列表页需显示安全测试执行记录（从 `/api/security/executions` 获取） |

#### 2.1.3 非功能需求

| 需求项 | 说明 |
|--------|------|
| **NFR1.1** | Markdown 渲染需支持表格、代码块、列表等常见元素 |
| **NFR1.2** | 渲染后的报告需支持滚动查看（可能较长） |
| **NFR1.3** | 主题切换时，报告样式需同步切换 |

#### 2.1.4 技术方案

```
方案 A：Markdown 前端渲染（推荐）
- 安装 `marked` 或 `markdown-it` 依赖
- 前端获取 Markdown 内容后实时渲染
- 优点：灵活、支持主题切换、响应式
- 缺点：需要新增依赖

方案 B：后端生成 HTML
- 修改 security_report_service.py 生成 HTML 版本
- 前端继续用 iframe 预览
- 优点：无需前端修改渲染逻辑
- 缺点：主题切换困难、样式需硬编码

选择：方案 A
```

#### 2.1.5 修改文件范围

| 文件 | 修改内容 |
|------|---------|
| `frontend/package.json` | 新增 `marked` 依赖 |
| `frontend/src/views/Reports.vue` | 增加 `case_type='security'` 分支，Markdown 渲染 |
| `frontend/src/api/reports.ts` 或 `frontend/src/api/security.ts` | 可能需要调整 API 调用 |

---

### 需求 2：补充 API3/4/6/7/9/10 安全测试用例

#### 2.2.1 当前状态

- 已有 12 个安全测试模块（API1-API10 + 历史漏洞回归 + 华为红线）
- 已有 24 个测试用例，覆盖：
  - ✅ API1: Broken Object Level Authorization（对象级别授权失效）
  - ✅ API2: Broken Authentication（身份认证失效）
  - ✅ API5: Broken Function Level Authorization（功能级别授权失效）
  - ✅ API8: Injection（注入）
  - ✅ 历史漏洞回归验证
  - ✅ 华为安全红线检查
- **缺失用例的模块**：
  - ❌ API3: Broken Object Property Level Authorization（对象属性级别授权失效）
  - ❌ API4: Unrestricted Resource Consumption（资源消耗不受限）
  - ❌ API6: Unrestricted Access to Sensitive Business Flows（无限制访问敏感业务流）
  - ❌ API7: Server Side Request Forgery（服务器端请求伪造）
  - ❌ API9: Improper Inventory Management（库存管理不当）
  - ❌ API10: Unsafe Consumption of APIs（不安全的第三方 API 集成）

#### 2.2.2 功能需求

| 需求项 | 说明 |
|--------|------|
| **FR2.1** | 为 API3 模块新增 3-5 个测试用例 |
| **FR2.2** | 为 API4 模块新增 3-5 个测试用例 |
| **FR2.3** | 为 API6 模块新增 3-5 个测试用例 |
| **FR2.4** | 为 API7 模块新增 3-5 个测试用例 |
| **FR2.5** | 为 API9 模块新增 3-5 个测试用例 |
| **FR2.6** | 为 API10 模块新增 3-5 个测试用例 |

#### 2.2.3 用例设计原则

根据 `knowledge_base.py` 和 `security_executor.py` 的设计模式：

1. **用例结构**：
   ```json
   {
     "module_id": "sec_api03",
     "case_id": "sec_2_3_001",
     "name": "测试名称",
     "risk_level": "high",
     "description": "测试描述",
     "test_type": "vulnerability_scan",
     "request": {
       "method": "GET/POST",
       "path": "/api/xxx",
       "params": {},
       "headers": {},
       "body": {}
     },
     "assertions": [
       {
         "type": "status_code",
         "expected": 200,
         "vulnerability_if_match": false
       }
     ],
     "references": ["OWASP API Security Top 10 2023"]
   }
   ```

2. **风险等级**：
   - `critical` — 严重（合并到 high 列统计）
   - `high` — 高危
   - `medium` — 中危
   - `low` — 低危
   - `info` — 信息

3. **测试类型**：
   - `vulnerability_scan` — 漏洞扫描
   - `auth_bypass` — 认证绕过
   - `privilege_escalation` — 权限提升
   - `injection_test` — 注入测试
   - `rate_limit_test` — 限流测试

#### 2.2.4 各模块用例设计（草案）

| 模块 | 用例 ID | 用例名称 | 风险等级 | 测试类型 |
|------|---------|----------|----------|----------|
| **API3** | sec_2_3_001 | 越权访问其他用户属性 | high | privilege_escalation |
| **API3** | sec_2_3_002 | 敏感字段未做权限校验 | medium | vulnerability_scan |
| **API3** | sec_2_3_003 | 批量查询泄露敏感属性 | high | vulnerability_scan |
| **API4** | sec_2_4_001 | 无速率限制的批量请求 | high | rate_limit_test |
| **API4** | sec_2_4_002 | 大文件上传无限制 | medium | vulnerability_scan |
| **API4** | sec_2_4_003 | 复杂查询无超时限制 | medium | vulnerability_scan |
| **API6** | sec_2_6_001 | 敏感业务流程无验证码 | high | vulnerability_scan |
| **API6** | sec_2_6_002 | 批量操作无二次确认 | medium | vulnerability_scan |
| **API6** | sec_2_6_003 | 自动化攻击检测缺失 | high | vulnerability_scan |
| **API7** | sec_2_7_001 | 内网 IP 探测 | critical | vulnerability_scan |
| **API7** | sec_2_7_002 | 云元数据接口访问 | critical | vulnerability_scan |
| **API7** | sec_2_7_003 | 文件读取 SSRF | high | vulnerability_scan |
| **API9** | sec_2_9_001 | 未授权访问已废弃 API | high | vulnerability_scan |
| **API9** | sec_2_9_002 | 测试环境 API 暴露 | medium | vulnerability_scan |
| **API9** | sec_2_9_003 | API 版本信息泄露 | low | vulnerability_scan |
| **API10** | sec_2_10_001 | 第三方 API 响应未校验 | high | vulnerability_scan |
| **API10** | sec_2_10_002 | 第三方 API 超时未处理 | medium | vulnerability_scan |
| **API10** | sec_2_10_003 | 第三方 API 密钥泄露 | critical | vulnerability_scan |

**合计：18 个新用例**（每模块 3 个）

#### 2.2.5 修改文件范围

| 文件 | 修改内容 |
|------|---------|
| `backend/scripts/create_security_cases.py` | 新增 18 个用例定义，更新模块用例数统计 |

---

## 三、多窗口并行开发协调

根据 `Docs/多窗口并行开发指南.md`：

| 项目 | 安全测试窗口（本窗口） | 会议管理窗口 |
|------|----------------------|------------|
| 后端端口 | 8002（或不启动） | 8001 |
| 前端端口 | 3001（或不启动） | 3000 |
| 开发模块 | 安全测试 | 会议管理/UI自动化 |
| Playwright | **不执行 UI 用例** | 可执行 |
| Git 提交 | 提交前先 `git pull` | 提交后 push |
| 数据库 | **错开写入时间** | 错开写入时间 |

### 特别注意

- **需求 1**（前端报告中心适配）：无冲突，可直接并行开发
- **需求 2**（补充用例）：涉及数据库写入，需与会议管理窗口**错开脚本执行时间**

---

## 四、验收标准

### 需求 1 验收标准

- [ ] Reports.vue 能识别 `case_type='security'` 类型
- [ ] 安全测试报告能正确渲染 Markdown 内容
- [ ] 报告样式与 UI 自动化报告风格一致
- [ ] 下载报告功能正常
- [ ] 报告列表能显示安全测试执行记录

### 需求 2 验收标准

- [ ] 6 个缺失模块各有至少 3 个测试用例
- [ ] 新增用例能正常创建到数据库
- [ ] 新增用例能正常执行并生成报告
- [ ] 执行报告中 OWASP 覆盖矩阵能体现新增用例

---

## 五、风险评估

| 风险项 | 概率 | 影响 | 缓解措施 |
|--------|------|------|---------|
| Markdown 渲染样式与预期不符 | 中 | 中 | 参考现有 UI 报告样式，使用统一的 CSS 类 |
| 新增用例设计不够完善 | 中 | 中 | 参考 OWASP 官方测试用例和 `knowledge_base.py` 现有模式 |
| 数据库写锁冲突 | 低 | 高 | 与会议管理窗口协调脚本执行时间 |

---

## 六、参考文档

- `HANDOFF_安全测试.md` — 会话交接文档
- `Docs/PRD/需求文档/_PRD_安全测试模块需求文档.md` — 安全测试模块 PRD
- `backend/app/services/knowledge_base.py` — 知识库（历史漏洞、华为红线）
- `backend/app/executors/security_executor.py` — 安全测试执行引擎
- `Docs/多窗口并行开发指南.md` — 并行开发规范

---

*本文档由 Claude 生成，供计划执行文档参考。*
