6.4 KiB
6.4 KiB
安全修复快速检查清单
使用说明
- 每次修复前检查此清单
- 每次修复后更新状态
- 测试失败立即停止,分析原因
第一阶段检查清单
✅ 1.1 ENVI 主流程返回值
- 代码已修改
- 本地测试通过
- 集成测试通过
- 无副作用
- 可以继续下一项
快速测试命令:
# 运行一个 D-InSAR 工作流
# 在前端 IDL 自动化面板中提交任务
# 观察任务状态和日志
✅ 1.2 失败计数重复累加
- 代码已修改
- 本地测试通过
- 集成测试通过
- 无副作用
- 可以继续下一项
快速测试命令:
# 在前端 IDL 自动化面板中
# 使用 "Step 3: 提取 Disp 结果" 功能
# 故意触发一些失败(如修改文件权限)
# 检查返回的统计数据
✅ 1.3 PowerShell 编码
- 代码已修改
- 本地测试通过
- 集成测试通过
- 无副作用
- 可以继续下一项
快速测试命令:
# 运行启动脚本
.\scripts\start_app.ps1
# 检查 nginx.conf 编码
Get-Content .\nginx\conf\nginx.conf -Encoding UTF8
# 验证 Nginx 启动
curl http://localhost:8080
第二阶段检查清单
⏳ 2.1 AOI token 容量上限
- 代码已修改
- 环境变量已配置
- 本地测试通过
- 压力测试通过
- 内存监控正常
- 无副作用
- 可以继续下一项
快速测试脚本:
# 创建测试脚本 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 解析异常处理
- 代码已修改
- 本地测试通过
- 前端兼容性测试通过
- 错误消息清晰
- 无副作用
- 可以继续下一项
快速测试数据:
// 无效 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 路径归属判断
- 代码已修改
- 本地测试通过
- 边界情况测试通过
- 扫描结果准确
- 无副作用
- 可以继续下一项
快速测试步骤:
# 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 解包安全校验
- 代码已修改
- 本地测试通过
- 安全测试通过
- 性能测试通过
- 无副作用
- 可以继续下一项
快速测试脚本:
# 创建测试脚本 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")
紧急回滚程序
如果任何测试失败,立即执行:
# 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 数量上限:_个
解包性能
- 修复前平均耗时:_秒
- 修复后平均耗时:_秒
- 性能差异:_%
签名确认
每完成一个阶段,填写以下信息:
第一阶段
- 修复人:_______
- 测试人:_______
- 完成日期:_______
- 签名:_______
第二阶段
- 修复人:_______
- 测试人:_______
- 完成日期:_______
- 签名:_______
第三阶段
- 修复人:_______
- 测试人:_______
- 完成日期:_______
- 签名:_______