feat: 实现 Client 在线更新与安全回退 (#93)
This commit is contained in:
@@ -185,6 +185,20 @@ Artifact 写入前应脱敏,数据库只保存引用。保留周期由设置
|
||||
- 迟到的 Admin 响应不得覆盖更新的本地执行状态。
|
||||
- 数据库损坏、磁盘写满和只读目录必须产生可操作错误,不能继续下单。
|
||||
|
||||
### 8.1 在线更新安全
|
||||
|
||||
- 清单和更新包只允许 HTTPS,不提供忽略证书错误的开关;URL 不得包含账号密码、
|
||||
查询参数或片段,避免凭据随地址写入 SQLite 或错误提示。
|
||||
- 更新包必须与最终清单 URL 同源,并同时校验清单声明的字节大小和 SHA256。
|
||||
- 清单、压缩包和解压后总大小均有限制;ZIP 只能包含安全的 `app/` 内容,拒绝路径
|
||||
穿越、绝对路径、反斜杠路径和符号链接。
|
||||
- 下载和解压只写 `data/update/`;`client.db`、日志、Artifact 和其他设置不得进入
|
||||
替换范围。
|
||||
- Launcher 发现主程序仍在运行时不得替换目录;替换失败必须恢复旧 `app`,新版本
|
||||
未通过健康检查时恢复 `app.old`。
|
||||
- SHA256 不证明发布者身份。当前发布服务器整体失陷不在保护范围内,正式扩大分发
|
||||
前应另行评估签名清单和代码签名。
|
||||
|
||||
## 9. 性能和响应性
|
||||
|
||||
- 表格使用模型/视图和增量加载,不为每个单元格创建 QWidget。
|
||||
@@ -207,6 +221,7 @@ Artifact 写入前应脱敏,数据库只保存引用。保留周期由设置
|
||||
| 6 | Windows 干净环境启动测试通过 | **未打包版本**:找一台没装过本项目的机器,照 [00 上手指南](00-getting-started.md) 从头走一遍。**已打包版本**:把整个文件夹拷到一台**没装 Python** 的机器上双击 `Launcher.exe` | 开发者 |
|
||||
| 6b | 升级不丢数据(仅打包版本) | 关闭程序并只换掉 `app/`,保留 `Launcher.exe` 和 `data/`;启动后任务、日志、设置都还在 | 开发者 |
|
||||
| 6c | 发布清单与产物一致 | `autobuy——manifest.json` 中的版本、文件名、字节大小和 SHA256 与实际压缩包一致,更新包中没有 `data/` | 开发者 |
|
||||
| 6d | 在线更新和回退通过 | 使用上一版本目录检查新版本、下载、下次启动替换、健康标记、文件占用失败和自动回退;确认数据库未被覆盖 | 开发者 |
|
||||
| 7 | 日志和产物无敏感信息 | 翻一遍日志和 `artifacts/`,确认没有 token、Cookie、密码、收货人信息 | 开发者 |
|
||||
| 8 | 开源和商业许可证已确认 | 新增依赖的许可证是否允许本项目的使用方式 | **项目负责人**(不是开发者自己判断) |
|
||||
| 9 | 真实下单版本额外满足采购安全门禁 | 逐条核对 §3 的 8 项 | **项目负责人 + 操作人员共同确认** |
|
||||
|
||||
Reference in New Issue
Block a user