# 【安全测试】报告格式对齐 - 需求文档

> **文档类型**: PRD 需求文档
> **创建日期**: 2026-07-21
> **参考实现**: `临时目录/安全测试/ApiSecurityTest/utils/report_generator.py`
> **优先级**: P1

---

## 一、需求背景

当前安全测试报告生成服务 `security_report_service.py` 已实现 7 章节 Markdown 报告，但与参考实现的报告格式存在差异。参考实现的报告经过实战交付验证，格式规范、信息完整，需要将当前实现对齐到参考格式。

---

## 二、当前差异清单

### 2.1 章节结构差异

| 章节 | 参考实现 | 当前实现 | 差异 |
|------|---------|---------|------|
| 标题/基本信息 | 一份总报告 | 一份总报告 | ✅ 一致 |
| 一、执行概要 | 有 | 有 | ✅ 一致 |
| 二、漏洞详情 | 有 | 有 | ✅ 一致 |
| 三、已验证安全项 | 有 | 有 | ✅ 一致 |
| 四、风险评估与修复建议 | 有 | 有 | ✅ 一致 |
| 五、已知安全问题清单 | 有 | 有 | ✅ 一致 |
| 五.五、历史漏洞回归验证 | 有（编号五.五） | 有（编号六） | ⚠️ 编号不同 |
| 五.六、华为安全红线合规性检查 | 有（编号五.六） | 有（编号七） | ⚠️ 编号不同 |
| 六、测试环境与工具 | 有 | 有（编号八） | ⚠️ 编号不同 |
| 七、参考资料 | 有 | 无 | ❌ 缺失 |

### 2.2 OWASP 覆盖矩阵差异

| 维度 | 参考实现 | 当前实现 | 差异 |
|------|---------|---------|------|
| 风险等级列 | 高危 / 中危 / 低危 / 信息 / 安全（5列） | 严重 / 高危 / 中危 / 低危 / 信息 / 安全（6列） | ⚠️ 多了"严重"列 |
| 等级体系 | 中文（高危/中危/低危/信息类） | 英文+映射（critical/high/medium/low/info） | ⚠️ 平台有 critical，需处理 |

### 2.3 漏洞详情差异

| 维度 | 参考实现 | 当前实现 | 差异 |
|------|---------|---------|------|
| 标题格式 | `### 2.{idx} [{r.level}] {r.name}` | `### 2.{idx} [{level_name}] {r.name}` | ✅ 一致 |
| 等级显示 | 中文（高危） | 中文（高危） | ✅ 一致 |

### 2.4 历史漏洞回归验证差异

| 维度 | 参考实现 | 当前实现 | 差异 |
|------|---------|---------|------|
| 章节编号 | `五.五` | `六` | ⚠️ 需对齐 |
| 识别方式 | `metadata.is_regression` | `test_id.startswith("HV-")` | ✅ 当前更简洁 |
| 表格列 | 编号/漏洞来源/测试项/当前状态/风险等级/详情（6列） | 编号/漏洞来源/测试项/当前状态/风险等级（5列） | ⚠️ 缺"详情"列 |
| 详情显示 | `description[:80] + "..."` | 无 | ❌ 缺失 |

### 2.5 华为安全红线合规性检查差异

| 维度 | 参考实现 | 当前实现 | 差异 |
|------|---------|---------|------|
| 章节编号 | `五.六` | `七` | ⚠️ 需对齐 |
| 识别方式 | `metadata.is_huawei_redline` + `metadata.hw_*` | `test_id.startswith("HW-")` + `knowledge_base` | ✅ 当前更合理 |
| 表格列 | 检查编号/检查类别/要求/测试结果/合规状态（5列） | 同上 | ✅ 一致 |
| 要求字段截断 | `[:57] + "..."` | `[:57] + "..."` | ✅ 一致 |

### 2.6 测试环境与工具差异

| 维度 | 参考实现 | 当前实现 | 差异 |
|------|---------|---------|------|
| 服务器信息 | `192.168.5.44 (X86架构-欧拉)` | `192.168.5.44` | ⚠️ 缺架构信息 |
| 章节编号 | 六 | 八 | ⚠️ 需对齐 |

### 2.7 缺失章节

| 章节 | 参考实现内容 | 当前状态 |
|------|------------|---------|
| 七、参考资料 | Z 盘路径（华为红线/漏洞报告/Nginx配置） | ❌ 完全缺失 |

---

## 三、对齐需求

### 3.1 章节编号对齐

| 原编号 | 新编号 |
|--------|--------|
| 六、历史漏洞回归验证 | 五.五、历史漏洞回归验证 |
| 七、华为安全红线合规性检查 | 五.六、华为安全红线合规性检查 |
| 八、测试环境与工具 | 六、测试环境与工具 |

**新增**：
- 七、参考资料

### 3.2 OWASP 覆盖矩阵对齐

将平台的 6 级风险等级（critical/high/medium/low/info + 安全）映射到参考实现的 5 列格式：

| 平台 level | 报告列 |
|-----------|--------|
| critical | 合并到 🔴高危 |
| high | 🔴高危 |
| medium | 🟠中危 |
| low | 🟡低危 |
| info | 🔵信息 |
| 安全 | 🟢安全 |

**实现方式**：在 `get_summary()` 和 `get_module_stats()` 中，将 critical 计入 high 列。

### 3.3 历史漏洞表格对齐

新增"详情"列，显示 `description` 前 80 字符：

```markdown
| 编号 | 漏洞来源 | 测试项 | 当前状态 | 风险等级 | 详情 |
|------|---------|--------|---------|---------|------|
| HV-001 | 长安深蓝汽车 | HV-001 SQL注入-会议预定接口 | ✅ 已修复 | 高危 | 会议预定接口存在SQL注入漏洞... |
```

### 3.4 服务器信息对齐

在 `_extract_server_info()` 中添加架构后缀：

```
192.168.5.44 (X86架构-欧拉)
```

**方案**：从 `SecurityConfig` 或平台配置读取架构信息，若无则使用默认值。

### 3.5 新增参考资料章节

```markdown
## 七、参考资料

- 华为安全红线资料：[Z:\deploy\18其它系统\安全测试\01安全测试资料]
- 以往漏洞报告资料：[Z:\deploy\18其它系统\安全测试\02项目漏洞资料]
- Nginx配置文件：[Z:\deploy\18其它系统\安全测试\03Nginx配置文件]
```

**方案**：作为常量配置，可从 `SecurityConfig` 覆盖。

---

## 四、非功能性需求

| 需求 | 说明 |
|------|------|
| 兼容性 | 保持现有 API 不变，仅修改报告内容格式 |
| 可配置 | 服务器架构、参考资料路径可配置 |
| 回归测试 | 现有 7 章节报告测试用例需继续通过 |

---

## 五、验收标准

1. ✅ 生成的报告与参考实现格式完全一致（章节编号、列数、内容）
2. ✅ OWASP 覆盖矩阵为 5 列（无"严重"列）
3. ✅ 历史漏洞表格有"详情"列
4. ✅ 服务器信息含架构后缀
5. ✅ 有"七、参考资料"章节
6. ✅ 现有测试通过

---

*本文档为安全测试报告格式对齐需求文档。*