# 安全测试模块 - 计划执行文档

> **文档版本**: v1.0
> **创建日期**: 2026-07-21
> **关联需求**: `_PRD_安全测试模块需求文档.md`
> **执行策略**: 分阶段迭代，每阶段可独立验证

---

## 一、执行总览

### 1.1 阶段划分

| 阶段 | 名称 | 核心交付 | 预计工期 |
|------|------|---------|---------|
| Phase 1 | 后端安全测试引擎 | SecurityExecutor + HttpClient + AuthHelper | 3天 |
| Phase 2 | 前端安全测试页面 | Security.vue + 路由 + API封装 | 2天 |
| Phase 3 | OWASP Top 10 用例导入 | 90+ 安全测试用例 | 2天 |
| Phase 4 | 报告生成与导出 | Markdown报告 + 前端展示 | 1天 |
| Phase 5 | 知识库集成与联调 | 历史漏洞 + 华为红线 + 端到端测试 | 1天 |

### 1.2 依赖关系

```
Phase 1 (后端引擎) ──→ Phase 2 (前端页面) ──→ Phase 4 (报告)
                    ──→ Phase 3 (用例导入) ──→ Phase 5 (知识库+联调)
```

---

## 二、Phase 1: 后端安全测试引擎

### 2.1 任务清单

| # | 任务 | 文件 | 说明 |
|---|------|------|------|
| 1.1 | 创建安全测试配置模型 | `backend/app/models/security_config.py` | SecurityConfig ORM |
| 1.2 | 创建漏洞结果模型 | `backend/app/models/vulnerability_result.py` | VulnerabilityResult ORM |
| 1.3 | 创建安全测试配置Schema | `backend/app/schemas/security.py` | Pydantic 校验 |
| 1.4 | 迁移 HttpClient | `backend/app/executors/http_client.py` | 从参考实现迁移，适配平台 |
| 1.5 | 迁移 AuthHelper | `backend/app/executors/auth_helper.py` | 多账号登录 |
| 1.6 | 开发 SecurityExecutor | `backend/app/executors/security_executor.py` | 安全测试执行引擎 |
| 1.7 | 开发断言引擎 | `backend/app/executors/assertion_engine.py` | 漏洞判定逻辑 |
| 1.8 | 创建安全测试服务 | `backend/app/services/security_service.py` | 业务逻辑层 |
| 1.9 | 创建安全测试路由 | `backend/app/routers/security.py` | API 路由 |
| 1.10 | 注册路由到 main.py | `backend/app/main.py` | 添加 security 路由 |
| 1.11 | 数据库迁移 | `backend/app/database.py` | 新增表初始化 |

### 2.2 详细设计

#### 2.2.1 SecurityExecutor 核心类

```python
class SecurityExecutor:
    """
    安全测试执行器
    
    与 PlaywrightExecutor 并列，负责 API 安全测试的执行。
    不依赖浏览器，使用 requests 库发送 HTTP 请求。
    """
    
    def __init__(self, config: dict):
        self.client = HttpClient(config)
        self.auth = AuthHelper(self.client)
        self.results: List[VulnResult] = []
        self._is_running = False
    
    def start(self) -> bool:
        """初始化执行环境，登录所有账号"""
        
    def execute_case(self, case: TestCase) -> CaseSecurityResult:
        """执行单个安全测试用例"""
        
    def stop(self):
        """停止执行"""
    
    def _execute_step(self, step: dict) -> StepSecurityResult:
        """执行单个测试步骤"""
    
    def _evaluate_assertion(self, assertion: dict, response) -> bool:
        """评估断言，判定是否存在漏洞"""
```

#### 2.2.2 HttpClient 适配

从参考实现迁移，关键适配点：

| 参考实现 | 平台适配 | 说明 |
|---------|---------|------|
| `config.yaml` 文件读取 | 从 `SecurityConfig` 数据库模型读取 | 配置持久化 |
| `utils.logger` | `logging.getLogger` | 统一日志 |
| `VulnResult` 数据类 | `VulnerabilityResult` ORM | 结果持久化 |
| 独立运行 | 集成到 `ExecutionService` | 统一调度 |

#### 2.2.3 执行流程集成

```python
# execution_service.py 扩展
async def run_execution(self, execution_id: str):
    execution = await self._get_execution(execution_id)
    
    if execution.case_type == "security":
        # 安全测试走 SecurityExecutor
        executor = SecurityExecutor(config)
        loop = asyncio.get_event_loop()
        await loop.run_in_executor(None, self._run_security, executor, execution)
    else:
        # UI 测试走 PlaywrightExecutor
        executor = PlaywrightExecutor()
        loop = asyncio.get_event_loop()
        await loop.run_in_executor(None, self._run_ui, executor, execution)
```

#### 2.2.4 API 路由设计

```python
# backend/app/routers/security.py

@router.get("/config")                    # 获取安全测试配置
@router.put("/config")                    # 更新安全测试配置
@router.post("/executions")               # 创建安全测试执行
@router.get("/executions/{execution_id}")  # 获取执行详情
@router.get("/reports/{execution_id}")     # 获取安全测试报告
@router.get("/knowledge-base")            # 获取知识库
@router.get("/knowledge-base/vulns")      # 获取历史漏洞列表
@router.get("/knowledge-base/redlines")   # 获取华为红线列表
```

### 2.3 验收标准

- [ ] SecurityExecutor 可初始化并登录测试账号
- [ ] 可执行单个安全测试用例并返回结果
- [ ] 漏洞结果正确持久化到数据库
- [ ] API 接口可通过 Swagger 文档测试
- [ ] WebSocket 实时推送执行进度

---

## 三、Phase 2: 前端安全测试页面

### 3.1 任务清单

| # | 任务 | 文件 | 说明 |
|---|------|------|------|
| 2.1 | 创建安全测试页面 | `frontend/src/views/Security.vue` | 主页面（Tab 切换） |
| 2.2 | 创建配置管理组件 | `frontend/src/views/security/ConfigTab.vue` | 目标/账号/认证配置 |
| 2.3 | 创建用例管理组件 | `frontend/src/views/security/CasesTab.vue` | OWASP 用例列表 |
| 2.4 | 创建执行中心组件 | `frontend/src/views/security/ExecutionTab.vue` | 执行+实时进度 |
| 2.5 | 创建报告中心组件 | `frontend/src/views/security/ReportTab.vue` | 报告查看+导出 |
| 2.6 | 创建 API 封装 | `frontend/src/api/security.ts` | axios 调用 |
| 2.7 | 创建类型定义 | `frontend/src/types/security.ts` | TypeScript 类型 |
| 2.8 | 添加路由 | `frontend/src/router/index.ts` | /security 路由 |
| 2.9 | 侧边栏添加入口 | `frontend/src/App.vue` | Shield 图标 |

### 3.2 页面设计

#### Security.vue 主页面

```
┌─────────────────────────────────────────────────┐
│  🛡️ 安全测试                                      │
├─────────────────────────────────────────────────┤
│  [配置管理] [用例管理] [执行中心] [报告中心]          │
├─────────────────────────────────────────────────┤
│                                                   │
│  （Tab 内容区域）                                   │
│                                                   │
└─────────────────────────────────────────────────┘
```

#### 配置管理 Tab

```
┌─────────────────────────────────────────────────┐
│  目标服务器                                        │
│  ┌─────────────────────────────────────────────┐ │
│  │ 服务器地址: [https://192.168.5.44        ]  │ │
│  │ SSL验证:   [✗]  超时: [30]秒              │ │
│  └─────────────────────────────────────────────┘ │
│                                                   │
│  测试账号                                          │
│  ┌─────────────────────────────────────────────┐ │
│  │ 超级管理员: superadmin / ********  [测试]   │ │
│  │ 管理员:     admin@aq  / ********  [测试]   │ │
│  │ 普通用户:   user@aq   / ********  [测试]   │ │
│  │ 验证码:     [csba]                          │ │
│  └─────────────────────────────────────────────┘ │
│                                                   │
│  认证配置                                          │
│  ┌─────────────────────────────────────────────┐ │
│  │ Token类型: [accessToken]  机制: [JWT]       │ │
│  │ 登录路径:  [/platform/api/auth/login]       │ │
│  └─────────────────────────────────────────────┘ │
│                                                   │
│  限流配置                                          │
│  ┌─────────────────────────────────────────────┐ │
│  │ 暴力破解上限: [20]  限流测试上限: [100]     │ │
│  │ 请求间隔: [0.5]秒                           │ │
│  └─────────────────────────────────────────────┘ │
│                                                   │
│                              [保存配置]            │
└─────────────────────────────────────────────────┘
```

#### 用例管理 Tab

```
┌─────────────────────────────────────────────────┐
│  OWASP API Security Top 10                       │
│                                                   │
│  ┌─ API1 对象级别授权失效 ──────────── [8用例] ─┐ │
│  │  ✅ 2.1.1 水平越权访问其他用户会议详情       │ │
│  │  ✅ 2.1.2 水平越权修改/取消其他用户会议      │ │
│  │  ✅ 2.1.3 水平越权访问其他用户收藏列表       │ │
│  │  ...                                        │ │
│  └──────────────────────────────────────────────┘ │
│                                                   │
│  ┌─ API2 身份认证失效 ────────────── [13用例] ─┐ │
│  │  ...                                        │ │
│  └──────────────────────────────────────────────┘ │
│                                                   │
│  历史漏洞回归 ──────────────────────── [35条]     │
│  华为安全红线 ──────────────────────── [22项]     │
│                                                   │
│  [全选] [反选]           [执行选中用例]            │
└─────────────────────────────────────────────────┘
```

#### 执行中心 Tab

```
┌─────────────────────────────────────────────────┐
│  执行进度                                         │
│                                                   │
│  ████████████████░░░░  72/90 用例完成              │
│                                                   │
│  ┌─ 实时日志 ──────────────────────────────────┐ │
│  │ [14:05:30] ✅ 2.1.1 水平越权-会议详情 安全   │ │
│  │ [14:05:31] 🔴 2.1.2 水平越权-修改会议 漏洞!  │ │
│  │ [14:05:32] ✅ 2.1.3 水平越权-收藏列表 安全   │ │
│  │ [14:05:33] ⏳ 2.1.4 水平越权-跨公司 执行中...│ │
│  └──────────────────────────────────────────────┘ │
│                                                   │
│  统计: 🔴高危 3 | 🟠中危 5 | 🟡低危 0 | ✅安全 64 │
│                                                   │
│  [暂停] [停止]                                    │
└─────────────────────────────────────────────────┘
```

#### 报告中心 Tab

```
┌─────────────────────────────────────────────────┐
│  安全测试报告                                      │
│                                                   │
│  ┌─ 报告列表 ──────────────────────────────────┐ │
│  │ 192.168.5.44_安全测试报告_20260721.md  [查看]│ │
│  │ 192.168.5.44_安全测试报告_20260715.md  [查看]│ │
│  └──────────────────────────────────────────────┘ │
│                                                   │
│  ┌─ 报告预览 ──────────────────────────────────┐ │
│  │ # 接口安全测试总报告                          │ │
│  │ > 测试目标: https://192.168.5.44             │ │
│  │                                               │ │
│  │ ## 一、执行概要                               │ │
│  │ | 统计项 | 数值 |                             │ │
│  │ |--------|------|                             │ │
│  │ | 总用例 | 90 |                               │ │
│  │ | 高危   | 3  |                               │ │
│  │ ...                                           │ │
│  └──────────────────────────────────────────────┘ │
│                                                   │
│  [下载Markdown] [下载HTML] [上传网盘]              │
└─────────────────────────────────────────────────┘
```

### 3.3 验收标准

- [ ] /security 路由可正常访问
- [ ] 侧边栏显示安全测试入口（Shield 图标）
- [ ] 配置管理可保存和加载
- [ ] 用例管理可展示 OWASP 模块和用例
- [ ] 执行中心可触发执行并实时显示进度
- [ ] 报告中心可查看和下载报告

---

## 四、Phase 3: OWASP Top 10 用例导入

### 4.1 任务清单

| # | 任务 | 文件 | 说明 |
|---|------|------|------|
| 3.1 | 创建用例导入脚本 | `backend/scripts/create_security_cases.py` | 批量创建安全测试用例 |
| 3.2 | 导入 API1 用例 | 同上 | 8个水平越权用例 |
| 3.3 | 导入 API2 用例 | 同上 | 13个身份认证用例 |
| 3.4 | 导入 API3 用例 | 同上 | 9个对象属性越权用例 |
| 3.5 | 导入 API4 用例 | 同上 | 7个资源消耗用例 |
| 3.6 | 导入 API5 用例 | 同上 | 8个功能越权用例 |
| 3.7 | 导入 API6 用例 | 同上 | 6个业务流用例 |
| 3.8 | 导入 API7 用例 | 同上 | 9个SSRF用例 |
| 3.9 | 导入 API8 用例 | 同上 | 15个安全配置用例 |
| 3.10 | 导入 API9 用例 | 同上 | 8个库存管理用例 |
| 3.11 | 导入 API10 用例 | 同上 | 7个第三方API用例 |
| 3.12 | 导入历史漏洞回归用例 | 同上 | 35个历史漏洞验证 |
| 3.13 | 导入华为红线检查用例 | 同上 | 22项红线检查 |

### 4.2 用例数据结构

每个安全测试用例的 `steps` 字段结构：

```json
{
  "test_type": "api_security",
  "target": {
    "base_url": "https://192.168.5.44",
    "path": "/api/message/getMessageById",
    "method": "GET"
  },
  "auth": {
    "required": true,
    "account": "user",
    "expect_different_account": "superadmin"
  },
  "request": {
    "params": {"id": "${meeting_id}"},
    "headers": {},
    "body": null
  },
  "pre_steps": [
    {
      "action": "get_resource_id",
      "account": "superadmin",
      "path": "/api/message/getMeetingList",
      "params": {"pageNo": 1, "pageSize": 5},
      "extract": {"meeting_id": "data.records[0].id"}
    }
  ],
  "assertions": [
    {
      "type": "status_code_not_equal",
      "expect": 200,
      "description": "越权访问应被拒绝"
    },
    {
      "type": "response_code_not_contain",
      "expect": ["401", "403", "B0027"],
      "description": "应返回权限不足"
    }
  ],
  "vulnerability": {
    "id": "2.1.1",
    "name": "水平越权访问其他用户会议详情",
    "level": "high",
    "description": "user 使用 Token 成功访问了 superadmin 的会议详情",
    "fix_suggestion": "在接口中增加用户身份校验，确保用户只能访问自己创建的会议数据"
  }
}
```

### 4.3 用例映射（参考实现 → 平台用例）

| 参考实现函数 | 平台用例ID | 用例名称 |
|-------------|-----------|---------|
| `test_2_1_1` | sec_2_1_1 | 水平越权访问其他用户会议详情 |
| `test_2_1_2` | sec_2_1_2a | 水平越权修改其他用户会议 |
| `test_2_1_2` | sec_2_1_2b | 水平越权取消其他用户会议 |
| `test_2_1_3` | sec_2_1_3 | 水平越权访问其他用户收藏列表 |
| `test_2_1_4` | sec_2_1_4 | 水平越权跨公司创建会议 |
| `test_2_1_5` | sec_2_1_5 | 水平越权访问运维集控设备接口 |
| `test_2_1_6` | sec_2_1_6 | 水平越权跨公司数据访问 |
| `test_2_1_7` | sec_2_1_7 | IDOR遍历访问签到记录 |
| `test_2_1_8` | sec_2_1_8 | IDOR遍历访问其他用户通知 |
| ... | ... | ... |

### 4.4 验收标准

- [ ] 10个 OWASP 模块全部创建
- [ ] 90+ 安全测试用例全部导入
- [ ] 35个历史漏洞回归用例导入
- [ ] 22项华为红线检查用例导入
- [ ] 用例可在前端用例管理页面查看

---

## 五、Phase 4: 报告生成与导出

### 5.1 任务清单

| # | 任务 | 文件 | 说明 |
|---|------|------|------|
| 4.1 | 迁移报告生成器 | `backend/app/services/security_report_service.py` | 从参考实现迁移 |
| 4.2 | 适配平台数据模型 | 同上 | VulnResult → VulnerabilityResult |
| 4.3 | 报告存储 | 同上 | 保存到 data/reports/ |
| 4.4 | 报告查看 API | `backend/app/routers/security.py` | 返回报告内容 |
| 4.5 | 前端报告展示 | `frontend/src/views/security/ReportTab.vue` | Markdown 渲染 |
| 4.6 | 报告导出 | 同上 | 下载 Markdown/HTML |

### 5.2 报告生成流程

```
1. 收集所有 VulnerabilityResult
2. 按风险等级排序
3. 生成 OWASP 覆盖矩阵
4. 生成漏洞详情（含复现步骤）
5. 生成修复建议
6. 附加历史漏洞回归结果
7. 附加华为红线检查结果
8. 输出 Markdown 文件
```

### 5.3 验收标准

- [ ] 执行完成后自动生成 Markdown 报告
- [ ] 报告包含完整的漏洞详情和修复建议
- [ ] 前端可预览报告内容
- [ ] 可下载 Markdown 格式报告

---

## 六、Phase 5: 知识库集成与联调

### 6.1 任务清单

| # | 任务 | 文件 | 说明 |
|---|------|------|------|
| 5.1 | 迁移知识库模块 | `backend/app/services/knowledge_base.py` | 历史漏洞+红线+载荷 |
| 5.2 | 知识库 API | `backend/app/routers/security.py` | 查询接口 |
| 5.3 | 前端知识库展示 | `frontend/src/views/security/KnowledgeTab.vue` | 浏览知识库 |
| 5.4 | 端到端联调 | - | 全流程测试 |
| 5.5 | 修复集成问题 | - | Bug 修复 |

### 6.2 知识库数据结构

```python
KNOWLEDGE_BASE = {
    "historical_vulns": [...],          # 35个历史漏洞
    "huawei_redlines": [...],           # 22项华为红线
    "sql_injection_payloads": [...],    # SQL注入载荷
    "sensitive_paths": [...],           # 敏感路径字典
    "nginx_analysis": {...},            # Nginx配置分析
    "appscan_summary": [...],           # AppScan报告摘要
    "iast_summary": [...],              # IAST报告摘要
}
```

### 6.3 验收标准

- [ ] 知识库数据可通过 API 查询
- [ ] 前端可浏览历史漏洞和红线检查
- [ ] 端到端流程：配置 → 选用例 → 执行 → 报告 完整可用
- [ ] WebSocket 实时推送正常

---

## 七、技术要点与风险

### 7.1 关键技术决策

| 决策点 | 方案 | 理由 |
|--------|------|------|
| 执行引擎 | 独立 SecurityExecutor | 与 PlaywrightExecutor 解耦，不依赖浏览器 |
| 配置存储 | 数据库 SecurityConfig | 支持多环境配置切换 |
| 签名算法 | 迁移参考实现 | 已验证可用，避免重复开发 |
| 报告格式 | Markdown | 与参考实现一致，支持版本对比 |
| 用例存储 | 复用 TestCase 模型 | case_type=security 区分，统一管理 |

### 7.2 风险与缓解

| 风险 | 影响 | 缓解措施 |
|------|------|---------|
| 签名算法变更 | 用例无法执行 | 签名逻辑封装为独立模块，便于更新 |
| 测试账号不可用 | 越权测试无法进行 | 配置页面支持账号测试连接 |
| 被测系统限流 | 误报漏洞 | 请求间隔可配置，默认 0.5秒 |
| SQLite 并发写锁 | 执行结果丢失 | 复用现有 pool_pre_ping 方案 |
| Windows 子进程限制 | 执行阻塞 | SecurityExecutor 不启动子进程，无此问题 |

### 7.3 多窗口并行开发注意事项

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

| 项目 | 本窗口（安全测试） | 主窗口（会议管理） |
|------|-------------------|-------------------|
| 后端端口 | 8002 | 8001 |
| 前端端口 | 3001 | 3000 |
| 开发模块 | 安全测试（新模块） | 会议管理 |
| 数据库操作 | 错开时间 | 错开时间 |
| Playwright | 不执行UI用例 | 可执行UI用例 |
| Git 提交 | 提交前先 pull | 提交后 push |

---

## 八、文件清单（新增/修改）

### 8.1 新增文件

```
backend/app/models/security_config.py          # 安全测试配置模型
backend/app/models/vulnerability_result.py     # 漏洞结果模型
backend/app/schemas/security.py                # 安全测试Schema
backend/app/executors/http_client.py           # HTTP客户端（迁移）
backend/app/executors/auth_helper.py           # 认证辅助（迁移）
backend/app/executors/security_executor.py     # 安全测试执行器
backend/app/executors/assertion_engine.py      # 断言引擎
backend/app/services/security_service.py       # 安全测试服务
backend/app/services/security_report_service.py # 安全报告服务
backend/app/services/knowledge_base.py         # 知识库
backend/app/routers/security.py                # 安全测试路由
backend/scripts/create_security_cases.py       # 用例导入脚本

frontend/src/views/Security.vue                # 安全测试主页面
frontend/src/views/security/ConfigTab.vue      # 配置管理
frontend/src/views/security/CasesTab.vue       # 用例管理
frontend/src/views/security/ExecutionTab.vue   # 执行中心
frontend/src/views/security/ReportTab.vue      # 报告中心
frontend/src/views/security/KnowledgeTab.vue   # 知识库
frontend/src/api/security.ts                   # API封装
frontend/src/types/security.ts                 # 类型定义
```

### 8.2 修改文件

```
backend/app/main.py                            # 注册 security 路由
backend/app/database.py                        # 新增表初始化
backend/app/models/__init__.py                 # 导出新模型
backend/app/services/execution_service.py      # 支持 case_type=security

frontend/src/router/index.ts                   # 添加 /security 路由
frontend/src/App.vue                           # 侧边栏添加安全测试入口
```

---

## 九、执行检查清单

### Phase 1 完成标准

- [ ] `SecurityExecutor` 可初始化
- [ ] `HttpClient` 签名算法正确
- [ ] `AuthHelper` 可登录3个账号
- [ ] 安全测试 API 可通过 Swagger 测试
- [ ] 数据库表正确创建

### Phase 2 完成标准

- [ ] /security 页面可正常访问
- [ ] 4个Tab可正常切换
- [ ] 配置可保存和加载
- [ ] 用例列表可展示

### Phase 3 完成标准

- [ ] 10个OWASP模块创建成功
- [ ] 90+用例导入成功
- [ ] 前端可查看所有用例

### Phase 4 完成标准

- [ ] 执行后自动生成报告
- [ ] 报告可在前端预览
- [ ] 报告可下载

### Phase 5 完成标准

- [ ] 知识库可查询
- [ ] 端到端流程完整可用
- [ ] 无阻塞性Bug

---

*文档结束*