# 安全修复快速检查清单 ## 使用说明 - 每次修复前检查此清单 - 每次修复后更新状态 - 测试失败立即停止,分析原因 --- ## 第一阶段检查清单 ### ✅ 1.1 ENVI 主流程返回值 - [x] 代码已修改 - [ ] 本地测试通过 - [ ] 集成测试通过 - [ ] 无副作用 - [ ] 可以继续下一项 **快速测试命令**: ```bash # 运行一个 D-InSAR 工作流 # 在前端 IDL 自动化面板中提交任务 # 观察任务状态和日志 ``` --- ### ✅ 1.2 失败计数重复累加 - [x] 代码已修改 - [ ] 本地测试通过 - [ ] 集成测试通过 - [ ] 无副作用 - [ ] 可以继续下一项 **快速测试命令**: ```bash # 在前端 IDL 自动化面板中 # 使用 "Step 3: 提取 Disp 结果" 功能 # 故意触发一些失败(如修改文件权限) # 检查返回的统计数据 ``` --- ### ✅ 1.3 PowerShell 编码 - [x] 代码已修改 - [ ] 本地测试通过 - [ ] 集成测试通过 - [ ] 无副作用 - [ ] 可以继续下一项 **快速测试命令**: ```powershell # 运行启动脚本 .\scripts\start_app.ps1 # 检查 nginx.conf 编码 Get-Content .\nginx\conf\nginx.conf -Encoding UTF8 # 验证 Nginx 启动 curl http://localhost:8080 ``` --- ## 第二阶段检查清单 ### ⏳ 2.1 AOI token 容量上限 - [ ] 代码已修改 - [ ] 环境变量已配置 - [ ] 本地测试通过 - [ ] 压力测试通过 - [ ] 内存监控正常 - [ ] 无副作用 - [ ] 可以继续下一项 **快速测试脚本**: ```python # 创建测试脚本 test_aoi_token_limit.py import requests import json base_url = "http://localhost:8000" token = "your_auth_token" # 创建 1500 个 AOI token for i in range(1500): geojson = { "type": "FeatureCollection", "features": [{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [100 + i * 0.001, 30 + i * 0.001] } }] } response = requests.post( f"{base_url}/api/aoi/upload", headers={"Authorization": f"Bearer {token}"}, json=geojson ) if i % 100 == 0: print(f"Created {i} tokens") print("Test completed") ``` --- ### ⏳ 2.2 AOI 解析异常处理 - [ ] 代码已修改 - [ ] 本地测试通过 - [ ] 前端兼容性测试通过 - [ ] 错误消息清晰 - [ ] 无副作用 - [ ] 可以继续下一项 **快速测试数据**: ```json // 无效 GeoJSON 1:缺少 type { "features": [] } // 无效 GeoJSON 2:错误的坐标 { "type": "FeatureCollection", "features": [{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [999, 999] } }] } // 无效 GeoJSON 3:格式错误 { "type": "FeatureCollection", "features": "not an array" } ``` --- ### ⏳ 2.3 路径归属判断 - [ ] 代码已修改 - [ ] 本地测试通过 - [ ] 边界情况测试通过 - [ ] 扫描结果准确 - [ ] 无副作用 - [ ] 可以继续下一项 **快速测试步骤**: ```bash # 1. 创建测试目录结构 mkdir -p /data/radar_backup mkdir -p /data/radar/subdir # 2. 放入测试文件 touch /data/radar_backup/test.tif touch /data/radar/subdir/test.tif # 3. 运行数据扫描 # 在前端数据管理面板中点击"刷新" # 4. 验证结果 # radar_backup 的文件不应该出现在列表中 # radar/subdir 的文件应该出现在列表中 ``` --- ## 第三阶段检查清单 ### ⏳ 3.1 解包安全校验 - [ ] 代码已修改 - [ ] 本地测试通过 - [ ] 安全测试通过 - [ ] 性能测试通过 - [ ] 无副作用 - [ ] 可以继续下一项 **快速测试脚本**: ```python # 创建测试脚本 test_tar_security.py import tarfile import os # 测试 1:创建包含符号链接的 tar with tarfile.open("test_symlink.tar", "w") as tar: # 创建一个符号链接指向 /etc/passwd info = tarfile.TarInfo(name="link_to_passwd") info.type = tarfile.SYMTYPE info.linkname = "/etc/passwd" tar.addfile(info) # 测试 2:创建包含 .. 路径的 tar with tarfile.open("test_escape.tar", "w") as tar: info = tarfile.TarInfo(name="../../../etc/passwd") info.size = 0 tar.addfile(info) # 测试 3:创建正常的 tar with tarfile.open("test_normal.tar", "w") as tar: # 创建一个正常文件 info = tarfile.TarInfo(name="normal_file.txt") info.size = 5 tar.addfile(info, fileobj=io.BytesIO(b"hello")) print("Test archives created") print("test_symlink.tar - should be rejected") print("test_escape.tar - should be rejected") print("test_normal.tar - should be accepted") ``` --- ## 紧急回滚程序 如果任何测试失败,立即执行: ```bash # 1. 查看最近的提交 git log --oneline -5 # 2. 回滚到上一个提交 git revert HEAD # 3. 或者硬回滚(谨慎使用) git reset --hard HEAD~1 # 4. 重启服务 # 停止所有服务 # 重新运行 start_app.ps1 # 5. 验证系统恢复正常 curl http://localhost:8080 ``` --- ## 测试环境要求 ### 最小测试环境 - [ ] Python 3.9+ - [ ] PostgreSQL 运行中 - [ ] Ollama 运行中(如果测试 AI 功能) - [ ] 至少 1 个 D-InSAR 结果数据 - [ ] 至少 1 个雷达数据 ### 推荐测试环境 - [ ] 完整的开发环境 - [ ] 测试数据库(非生产) - [ ] 监控工具(内存、CPU) - [ ] 日志查看工具 --- ## 测试数据准备 ### D-InSAR 测试数据 ``` 需要准备: - 至少 1 个完整的 Task_* 目录 - 包含 dinsar_results/out_ISARPTD_*_rsp_disp - 用于测试 extract_disp_results 功能 ``` ### 雷达数据测试 ``` 需要准备: - 至少 2 个 .tif 文件 - 放在 MONITOR_RADAR_DIRS 配置的目录中 - 用于测试预览图生成和路径判断 ``` ### AOI 测试数据 ``` 需要准备: - 有效的 GeoJSON 文件 - 无效的 GeoJSON 文件(多种错误类型) - 用于测试异常处理 ``` --- ## 性能基准 记录修复前后的性能指标: ### ENVI 工作流 - 修复前成功率:_% - 修复后成功率:_% - 平均耗时:_秒 ### AOI token - 修复前内存占用:_MB - 修复后内存占用:_MB - Token 数量上限:_个 ### 解包性能 - 修复前平均耗时:_秒 - 修复后平均耗时:_秒 - 性能差异:_% --- ## 签名确认 每完成一个阶段,填写以下信息: ### 第一阶段 - 修复人:_______ - 测试人:_______ - 完成日期:_______ - 签名:_______ ### 第二阶段 - 修复人:_______ - 测试人:_______ - 完成日期:_______ - 签名:_______ ### 第三阶段 - 修复人:_______ - 测试人:_______ - 完成日期:_______ - 签名:_______