73 lines
3.3 KiB
Markdown
73 lines
3.3 KiB
Markdown
# 需求分析
|
||
|
||
> 时间戳: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 规范。
|