audit(docs/28): Git 同步审计二轮——修复选项注入校验/默认 .gitignore/设置弹窗陈旧守卫,4 低项记录待办
This commit is contained in:
65
docs/28-审计二轮.md
Normal file
65
docs/28-审计二轮.md
Normal file
@@ -0,0 +1,65 @@
|
||||
# docs/28 — 审计二轮(聚焦 Git 同步,兼顾近期功能面)
|
||||
|
||||
时间:2026-11-14 晚。大王已真机测过大部分功能,本轮为代码审计:
|
||||
逐行复核 fadee6a 的 Rust 命令与前端接线,并抽查 docs/20–26 的
|
||||
关键不变量。先说结论:同步主链逻辑成立,发现 3 个中等问题已当场
|
||||
修复,4 个低问题记录待办,1 个沿袭项(CSP)状态未变。
|
||||
|
||||
## 已修复
|
||||
|
||||
### A1(中)git 命令参数的选项注入面
|
||||
分支名与远程地址来自用户输入,直接作 git 命令参数:以 `-` 开头
|
||||
会被 git 解析为选项(如给 remote add 塞 `-f` 立即抓取任意地址)。
|
||||
已在 Rust 入口加校验:validate_branch(简化 check-ref-format:
|
||||
拒绝 `-`/`.` 开头、`..`、空白/控制字符与 `~^:?*[\]`、`.lock`
|
||||
结尾、超长)与 validate_remote_url(拒绝 `-` 开头与空白/控制
|
||||
字符);git_init_repo、git_set_remote 强制走校验。
|
||||
|
||||
### A2(中)全文件夹同步的知情与兜底
|
||||
同步是 `add -A` 全文件夹提交:文件夹里的 .env、大二进制、系统
|
||||
垃圾都会被提交并推送,原始实现无任何提示与防线。两处补强:
|
||||
①init 时若无 .gitignore,种一份保守默认(.DS_Store、Thumbs.db、
|
||||
desktop.ini、*.tmp、~$*、.env、.env.*);②设置弹窗文案明示同步
|
||||
范围为文件夹全部文件(.gitignore 除外)与首次同步全量提交。
|
||||
|
||||
### A3(中)设置弹窗的陈旧状态误判
|
||||
仓库状态(gitInfo)异步加载完成前点开设置,弹窗按「未启用」
|
||||
渲染:远程地址为空、显示初始分支,保存会误走 init 流程并在
|
||||
remote add 处报错。已给打开动作加守卫:状态未就绪时不开弹窗,
|
||||
先刷新状态并在同步条给一句提示。
|
||||
|
||||
## 记录待办(本轮未改,附理由)
|
||||
|
||||
- B1(低)空仓库接入「已有内容」的远程:本地从未提交、远程分支
|
||||
已存在时,变基未出生 HEAD 的行为随 git 版本而异;失败时报错
|
||||
且可恢复(fetch 已完成,手动 git pull 一次即可)。不在同步链
|
||||
里引入 reset --hard 类危险动作,维持现状。
|
||||
- B2(低)git 子进程无超时:远程不可达(丢包型防火墙)时一次
|
||||
同步可能挂数分钟,期间显示「正在同步…」且挡后续同步。后续
|
||||
可给 run_git 加 spawn + 超时(建议 120 秒)。
|
||||
- B3(低)设置保存与进行中的同步可交错:set-url 与 fetch 各用
|
||||
当时地址,结果自洽、错误可见,不做互斥。
|
||||
- B4(低)SSH 远程首次连接的主机密钥确认:无终端环境会直接
|
||||
失败并显示错误,需先在终端连一次该主机。属预期行为。
|
||||
|
||||
## 沿袭项
|
||||
|
||||
- C1 CSP 仍为 null、Markdown 原始 HTML 的渲染面:docs/12 已
|
||||
记录未动,本轮复核状态未变,建议阶段 7 发布前单独处理。
|
||||
|
||||
## 复核通过(无问题)
|
||||
|
||||
- 同步链顺序 fetch→提交→变基→push;脏工作区不挡 pull;冲突
|
||||
rebase --abort 还原;身份缺失兜底 -c;无上游时 push -u。
|
||||
- 父仓库子目录不接管(show-toplevel 比对);命令数与注册数
|
||||
对账 28=28;Windows 子进程 CREATE_NO_WINDOW 防闪窗。
|
||||
- 前端:同步重入守卫(ref)、定时租约互斥、拉取成功刷文件树、
|
||||
工作区切换时状态复位与迟到响应丢弃、设置弹窗纳入 anyModal。
|
||||
- 抽查:chunkLoader 追加有 isCancelled 守卫;全仓无 TODO/
|
||||
FIXME/console.log 残留。
|
||||
|
||||
## 验证边界
|
||||
|
||||
- vitest 117+2 全过、tsc 与生产构建通过。
|
||||
- Rust 校验逻辑沙箱无 cargo 不可编译/单测,靠逐行复核;其实效
|
||||
待下次 Windows 构建时一并确认(校验为纯函数,无宏与平台 API)。
|
||||
Reference in New Issue
Block a user