安全策略
August 20, 2026 · View on GitHub
支持版本
| 版本 | 支持状态 |
|---|---|
| master | ✅ |
报告漏洞
请勿通过公开 Issue 报告安全漏洞。
请通过 GitHub Security Advisories 提交,或开启一个仅维护者可见的私有安全公告。我们会在收到后尽快回复。
安全模型(本插件的信任边界)
本插件在 DSH host 进程内执行 git 命令与文件读写,安全边界如下:
1. RPC 通道:仅回环可信
/git-api/*端点以authority: "loopback"注册,复用 DSH/api通道的 浏览器信任围栏;- 仅回环来源(
127.0.0.1/localhost/[::1])可调用;从局域网 / 公网 地址访问 WebUI 时,所有/git-api操作会被拒绝; - 通道走 HTTP POST + 标准 client-request 信封,不额外开端口。
2. 文件访问:工作区包含校验
-
list/read/search与write的path(相对路径)分支限定在当前 会话工作区根目录内:path.resolve+fs.realpath双重包含校验, 拒绝..穿越、绝对路径与符号链接逃逸; -
显式信任的例外:
readPath:按绝对路径只读(512KB 上限),不受工作区根约束;write的abs分支:按绝对路径写回(512KB 上限)。
这两个端点只为「面板预览 / 编辑过的文件」服务:浏览器端只会传回 host 刚刚读取过的真实文件路径(面板不会构造任意路径)。它们是「产物链接预览」 功能(可读取工作区之外的产物文件)的必要妥协,默认能力边界 = 面板里出现过的路径。
3. 命令执行:无 shell 注入面
- 所有 git 命令经
spawn(gitPath, ["-C", repo, ...args])的 argv 数组 执行,永不拼接 shell 字符串;提交信息、路径、分支名无法注入命令语法; gitPath默认从PATH解析(跳过.git-aishim 目录),可经cordis.patch.yml配置为绝对路径;- 子进程设置
GIT_TERMINAL_PROMPT=0(凭据提示快速失败而非挂起)与LC_ALL=C(输出可解析);单命令输出上限 512KB、超时 (状态类 30s / 变更类 180s)后终止进程。
4. 输出与大小限制
- 单条命令捕获输出 ≤ 512KB;文本读取 ≤ 512KB(超出截断并标记);
- diff 渲染带行数上限与词级高亮配对数上限,超大差异降级为行级着色。
5. 前端
- 面板经
createPortal渲染于受控 dialog 层,焦点陷阱 + 滚动锁定, 弹层不穿透; - CodeMirror 6 编辑器核心与语言包从公共 CDN(esm.sh / jsdelivr)懒加载, 仅在用户首次点击「编辑」时请求;若供应链风险不可接受,可在离线环境 使用(编辑功能自动禁用,保留系统应用打开兜底)。
已知考量
- 回环外的 WebUI 暴露:若用户将
dsh web端口转发 / 暴露给局域网或 公网,/git-api会拒绝请求(fail-closed),但 DSH 自身的/api暴露 风险不在本插件管辖内——请以回环方式访问; - 工作区即边界:插件对工作区内的任意 git 操作有完整权限(包括
reset --hard、force push 等),危险操作有二次确认,但确认后即真实执行。