Files
Mdeical_Sur_Report/工程分析/需求分析-2026-04-20-10-14-09.md

73 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 需求分析
> 时间戳2026-04-20-10-14-09
---
## 1. 原始需求描述
用户提出三个核心安全问题,要求对纯前端架构下的敏感数据保护机制进行加固:
1. **storage.ts 中 XOR 加密硬编码静态密钥** → 已知明文攻击风险
2. **API_KEY_CODES 字符码数组混淆** → API 密钥客户端暴露与盗刷风险
3. **ADMIN_DISABLE_AUTH_KEY 明文硬编码** → 垂直越权漏洞
用户给出的妥协方案方向(鉴于纯前端限制):
- 问题1改用 Web Crypto API (AES-GCM) + 环境变量注入密钥
- 问题2剥离前端密钥还原逻辑至少移入构建阶段环境变量
- 问题3用 SHA-256 哈希替代明文常量比对
---
## 2. 需求拆解
| 序号 | 子需求 | 涉及文件 | 优先级 |
|------|--------|----------|--------|
| 1 | 弃用 XOR 加密,改用 Web Crypto API AES-GCM | `src/utils/storage.ts` | P0 |
| 2 | 密钥从硬编码改为构建时环境变量注入 | `vite.config.ts`, `.env.example` | P0 |
| 3 | 兼容旧 XOR 加密数据的自动迁移读取 | `src/utils/storage.ts` | P0 |
| 4 | 删除 API_KEY_CODES 硬编码字符码数组 | `src/utils/storage.ts` | P0 |
| 5 | 默认 API Key 改为从环境变量读取 | `src/utils/storage.ts`, `vite.config.ts` | P0 |
| 6 | ADMIN_DISABLE_AUTH_KEY 改为 SHA-256 哈希比对 | `src/pages/UserManage.tsx` | P0 |
| 7 | 将源码中明文授权码替换为环境变量哈希值 | `.env.example`, `vite.config.ts` | P0 |
| 8 | 修复 UserManage.tsx 中原生 alert/confirm 使用 | `src/pages/UserManage.tsx` | P1 |
---
## 3. 影响范围评估
### 3.1 需要修改的文件
- `src/utils/storage.ts` — 加密机制重构、API Key 来源变更
- `src/pages/UserManage.tsx` — 授权码哈希比对、alert/confirm 替换
- `vite.config.ts` — 新增环境变量注入
- `.env.example` — 新增必需环境变量模板
### 3.2 潜在风险点
- **数据迁移兼容性**:旧版本用户 localStorage 中的 systemSettings 仍用 XOR 加密,必须支持双轨读取(先尝试 AES-GCM 解密,失败再回退 XOR
- **Web Crypto API 异步性**storage.get 当前为同步接口AES-GCM 解密为异步操作,需调整接口或设计异步包装
- **环境变量缺失导致构建失败**:若用户未配置新环境变量,构建产物中密钥将为空字符串
- **SHA-256 哈希盐值**:若仅做简单 SHA-256彩虹表仍可攻击需引入盐值
### 3.3 是否涉及数据迁移
- [x] 是。旧 `systemSettings` 的 XOR 加密数据需兼容读取,新写入全面使用 AES-GCM。
---
## 4. 验收标准
- [ ] `npm run lint` 无类型错误
- [ ] `npm run build` 构建成功
- [ ] storage.ts 中不再出现任何硬编码密钥字符串
- [ ] UserManage.tsx 中不再出现明文授权常量
- [ ] 旧版本 XOR 加密的 systemSettings 仍能被正确读取(向后兼容)
- [ ] 新写入的 systemSettings 使用 AES-GCM 加密
- [ ] 默认 API Key 从环境变量注入,源码中无字符码数组
- [ ] 禁用管理员的授权校验使用 SHA-256 + 盐值比对
- [ ] UserManage.tsx 中原生 alert/confirm 全部替换为自定义 UI 或至少移除硬编码明文提示
---
## 5. 关联历史需求
无直接关联历史需求。但需遵守 AGENTS.md 第 5.6 节数据迁移规范、第 5.7 节禁用原生 alert/confirm 规范。