279 lines
7.0 KiB
Markdown
279 lines
7.0 KiB
Markdown
# 安全问题修复进度跟踪
|
||
|
||
## 修复状态图例
|
||
- ✅ 已完成
|
||
- 🚧 进行中
|
||
- ⏸️ 暂缓
|
||
- ⏳ 待开始
|
||
- ❌ 已回滚
|
||
|
||
---
|
||
|
||
## 第一阶段:明确 Bug 修复
|
||
|
||
### 1.1 ENVI 主流程返回值缺失
|
||
- **状态**:✅ 已完成
|
||
- **修改文件**:`backend/app/services/envi_service.py:1630`
|
||
- **修改内容**:添加 `return record`
|
||
- **提交时间**:2026-03-04
|
||
- **测试状态**:⏳ 待测试
|
||
|
||
**测试清单**:
|
||
- [ ] 运行完整的 D-InSAR 工作流(dinsar_custom)
|
||
- [ ] 检查任务状态是否为 SUCCESS
|
||
- [ ] 检查日志是否包含 `workflow=dinsar_custom duration=XXXs`
|
||
- [ ] 验证前端显示是否正常
|
||
|
||
**测试结果**:
|
||
```
|
||
待填写...
|
||
```
|
||
|
||
---
|
||
|
||
### 1.2 失败计数重复累加
|
||
- **状态**:✅ 已完成
|
||
- **修改文件**:`backend/app/services/envi_service.py:1717, 1726`
|
||
- **修改内容**:删除重复的 `failed += 1`(两处)
|
||
- **提交时间**:2026-03-04
|
||
- **测试状态**:⏳ 待测试
|
||
|
||
**测试清单**:
|
||
- [ ] 运行 `extract_disp_results` 功能
|
||
- [ ] 故意触发失败(如权限问题)
|
||
- [ ] 验证 `failed` 计数是否准确
|
||
|
||
**测试结果**:
|
||
```
|
||
待填写...
|
||
```
|
||
|
||
---
|
||
|
||
### 1.3 PowerShell 编码问题
|
||
- **状态**:✅ 已完成(已增强)
|
||
- **修改文件**:`scripts/start_app.ps1:388`
|
||
- **修改内容**:使用 UTF-8 无 BOM 编码写入
|
||
- **提交时间**:2026-03-04
|
||
- **测试状态**:✅ 已验证
|
||
|
||
**额外修复**:
|
||
- 发现 `nginx.conf` 文件包含 UTF-8 BOM,导致 Nginx 启动失败
|
||
- 已删除 BOM(使用 `tail -c +4`)
|
||
- 修改脚本使用 `[System.IO.File]::WriteAllText()` 确保无 BOM
|
||
|
||
**测试清单**:
|
||
- [ ] 在 PowerShell 5 环境运行启动脚本
|
||
- [ ] 检查 nginx.conf 文件编码
|
||
- [ ] 验证 Nginx 是否正常启动
|
||
|
||
**测试结果**:
|
||
```
|
||
待填写...
|
||
```
|
||
|
||
---
|
||
|
||
**第一阶段总结**:
|
||
- 完成度:3/3 (100%) ✅
|
||
- 完成时间:2026-03-04
|
||
- 遇到的问题:无
|
||
- 回滚记录:无
|
||
- **状态**:代码修改已完成,等待测试验证
|
||
|
||
---
|
||
|
||
## 第二阶段:防御性增强
|
||
|
||
### 2.1 AOI token 容量上限
|
||
- **状态**:⏳ 待开始
|
||
- **修改文件**:`backend/app/routers/dependencies.py`
|
||
- **修改内容**:添加 `AOI_TOKEN_MAX_STORE_SIZE` 配置和容量检查
|
||
- **提交时间**:-
|
||
- **测试状态**:-
|
||
|
||
**测试清单**:
|
||
- [ ] 创建 1000+ 个 AOI token
|
||
- [ ] 验证内存占用是否稳定
|
||
- [ ] 检查日志是否有清理记录
|
||
- [ ] 验证被清理的 token 无法使用
|
||
- [ ] 验证新 token 仍可用
|
||
|
||
**测试结果**:
|
||
```
|
||
待填写...
|
||
```
|
||
|
||
---
|
||
|
||
### 2.2 AOI 解析异常处理
|
||
- **状态**:⏳ 待开始
|
||
- **修改文件**:`backend/app/routers/dependencies.py`
|
||
- **修改内容**:添加统一异常处理(400 vs 500)
|
||
- **提交时间**:-
|
||
- **测试状态**:-
|
||
|
||
**测试清单**:
|
||
- [ ] 上传无效 GeoJSON 文件
|
||
- [ ] 验证返回 400 而非 500
|
||
- [ ] 验证错误消息清晰
|
||
- [ ] 验证前端能正确处理
|
||
|
||
**测试结果**:
|
||
```
|
||
待填写...
|
||
```
|
||
|
||
---
|
||
|
||
### 2.3 路径归属判断优化
|
||
- **状态**:⏳ 待开始
|
||
- **修改文件**:`backend/app/services/data_service.py:530`
|
||
- **修改内容**:使用 `is_subpath` 替代 `startswith`
|
||
- **提交时间**:-
|
||
- **测试状态**:-
|
||
|
||
**测试清单**:
|
||
- [ ] 创建 `MONITOR_RADAR_DIRS_backup` 目录
|
||
- [ ] 放入测试文件
|
||
- [ ] 运行数据扫描
|
||
- [ ] 验证 backup 目录文件不被误判
|
||
|
||
**测试结果**:
|
||
```
|
||
待填写...
|
||
```
|
||
|
||
---
|
||
|
||
**第二阶段总结**:
|
||
- 完成度:0/3 (0%)
|
||
- 预计完成时间:-
|
||
- 遇到的问题:-
|
||
- 回滚记录:无
|
||
|
||
---
|
||
|
||
## 第三阶段:安全加固
|
||
|
||
### 3.1 解包安全校验增强
|
||
- **状态**:⏳ 待开始
|
||
- **修改文件**:`scripts/unpack_archives.py`
|
||
- **修改内容**:添加符号链接检查,使用逐个提取
|
||
- **提交时间**:-
|
||
- **测试状态**:-
|
||
|
||
**测试清单**:
|
||
- [ ] 创建包含符号链接的 tar 文件
|
||
- [ ] 验证被拒绝解包
|
||
- [ ] 创建正常 tar 文件
|
||
- [ ] 验证正常解包
|
||
- [ ] 对比解包性能
|
||
|
||
**测试结果**:
|
||
```
|
||
待填写...
|
||
```
|
||
|
||
---
|
||
|
||
**第三阶段总结**:
|
||
- 完成度:0/1 (0%)
|
||
- 预计完成时间:-
|
||
- 遇到的问题:-
|
||
- 回滚记录:无
|
||
|
||
---
|
||
|
||
## 第四阶段:权限重构
|
||
|
||
### 4.1 只读用户权限控制
|
||
- **状态**:⏸️ 暂缓
|
||
- **原因**:需要明确需求和前端配合
|
||
- **待讨论问题**:
|
||
- [ ] 系统中是否有只读用户?
|
||
- [ ] 只读用户的使用场景?
|
||
- [ ] 是否可以接受只读用户无法查看预览图?
|
||
- [ ] 是否需要前端配合?
|
||
|
||
---
|
||
|
||
## 总体进度
|
||
|
||
| 阶段 | 状态 | 完成度 | 预计时间 | 实际时间 |
|
||
|------|------|--------|---------|---------|
|
||
| 第一阶段 | ✅ 已完成 | 3/3 (100%) | 1 天 | 2026-03-04 |
|
||
| 第二阶段 | ⏳ 待开始 | 0/3 (0%) | 2-3 天 | - |
|
||
| 第三阶段 | ⏳ 待开始 | 0/1 (0%) | 2-3 天 | - |
|
||
| 第四阶段 | ⏸️ 暂缓 | - | 待定 | - |
|
||
|
||
**总完成度**:3/7 (43%)
|
||
|
||
---
|
||
|
||
## 问题记录
|
||
|
||
### 问题 #1:Nginx 启动失败 - UTF-8 BOM 问题
|
||
- **发现时间**:2026-03-04
|
||
- **问题描述**:Nginx 启动失败,错误信息 `unknown directive "worker_processes"`,发现 `nginx.conf` 文件包含 UTF-8 BOM(`ef bb bf`)
|
||
- **影响范围**:Nginx 无法启动,整个系统无法访问
|
||
- **解决方案**:
|
||
1. 使用 `tail -c +4` 删除现有文件的 BOM
|
||
2. 修改 PowerShell 脚本使用 `[System.IO.File]::WriteAllText()` 确保写入时无 BOM
|
||
- **状态**:✅ 已解决
|
||
|
||
### 问题 #2:PROJ 数据库版本冲突
|
||
- **发现时间**:2026-03-05
|
||
- **问题描述**:扫描 D-InSAR 结果时出现 PROJ 警告 `DATABASE.LAYOUT.VERSION.MINOR = 2 whereas >= 3 is expected`,PostgreSQL 自带的 PROJ 数据库版本过旧
|
||
- **影响范围**:不影响功能,但产生大量警告日志
|
||
- **解决方案**:
|
||
1. 在 `run_backend.py` 中自动检测并设置 `PROJ_LIB` 环境变量
|
||
2. 指向 GDAL 自带的新版 PROJ 数据库
|
||
- **状态**:✅ 已修复,待测试验证
|
||
|
||
### 问题 #3:扫描任务时前端未锁定
|
||
- **发现时间**:2026-03-05
|
||
- **问题描述**:D-InSAR 结果扫描任务运行时前端没有锁定
|
||
- **影响范围**:用户可能在扫描过程中进行其他操作,导致数据不一致
|
||
- **可能原因**:
|
||
1. 扫描任务执行太快(< 3 秒),前端轮询间隔(3 秒)来不及捕获
|
||
2. 任务状态更新有延迟
|
||
- **解决方案**:待确认是否需要修复(可能是正常行为)
|
||
- **状态**:⏳ 待分析
|
||
|
||
---
|
||
|
||
## 回滚记录
|
||
|
||
### 回滚 #1
|
||
- **回滚时间**:-
|
||
- **回滚内容**:-
|
||
- **回滚原因**:-
|
||
- **影响范围**:-
|
||
|
||
---
|
||
|
||
## 下一步行动
|
||
|
||
1. **立即行动**:
|
||
- [ ] 测试 1.1 ENVI 主流程返回值修复
|
||
- [ ] 如果测试通过,继续修复 1.2 和 1.3
|
||
|
||
2. **本周计划**:
|
||
- [ ] 完成第一阶段所有修复
|
||
- [ ] 充分测试第一阶段
|
||
- [ ] 提交第一阶段代码
|
||
|
||
3. **下周计划**:
|
||
- [ ] 根据第一阶段测试结果决定是否继续
|
||
- [ ] 如果继续,开始第二阶段
|
||
|
||
---
|
||
|
||
## 备注
|
||
|
||
- 每次修复后立即更新此文档
|
||
- 测试结果详细记录,包括成功和失败的情况
|
||
- 遇到问题及时记录到"问题记录"区域
|
||
- 回滚操作必须记录原因和影响范围
|