3.3 KiB
3.3 KiB
需求分析
时间戳:2026-04-20-10-14-09
1. 原始需求描述
用户提出三个核心安全问题,要求对纯前端架构下的敏感数据保护机制进行加固:
- storage.ts 中 XOR 加密硬编码静态密钥 → 已知明文攻击风险
- API_KEY_CODES 字符码数组混淆 → API 密钥客户端暴露与盗刷风险
- 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 是否涉及数据迁移
- 是。旧
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 规范。