安全策略

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 / searchwritepath(相对路径)分支限定在当前 会话工作区根目录内:path.resolve + fs.realpath 双重包含校验, 拒绝 .. 穿越、绝对路径与符号链接逃逸;

  • 显式信任的例外

    • readPath:按绝对路径只读(512KB 上限),不受工作区根约束;
    • writeabs 分支:按绝对路径写回(512KB 上限)。

    这两个端点只为「面板预览 / 编辑过的文件」服务:浏览器端只会传回 host 刚刚读取过的真实文件路径(面板不会构造任意路径)。它们是「产物链接预览」 功能(可读取工作区之外的产物文件)的必要妥协,默认能力边界 = 面板里出现过的路径。

3. 命令执行:无 shell 注入面

  • 所有 git 命令经 spawn(gitPath, ["-C", repo, ...args])argv 数组 执行,永不拼接 shell 字符串;提交信息、路径、分支名无法注入命令语法;
  • gitPath 默认从 PATH 解析(跳过 .git-ai shim 目录),可经 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 等),危险操作有二次确认,但确认后即真实执行。