dsh-push-privacy-guard:DSH 提交与推送前的隐私检查

前言

在 DSH(DeepSeek Harness)里让 Agent 执行 git commit、git push 或 gh repo sync 时,暂存区与即将上传的提交里可能混入 API Key、私钥、连接串、本机绝对路径或个人信息。人工逐行看 diff 成本高,单靠 .gitignore 也拦不住已经 git add 的内容。下面介绍 Host 插件 dsh-push-privacy-guard(维护者 lizhijie429,分类 admin-security):在工具层于上述命令执行之前做只读扫描,命中未白名单项时走 DSH 原生审批面板,由用户决定放行或阻止。

这是什么

一句话定位:内容泄露护栏,不是完整安全边界。插件挂接 DSH 的 tools/pre-execute(异步 prepend),覆盖 Agent 通过 pwsh / bash 一次性命令以及 PTC 内部 bash 发起的 commit/push;持久终端 terminal_send 上的 commit/push 默认直接拒绝。它不替代人工终端推送、脚本自行发起的推送,也无法保证规则库以外的泄露形式被识别。

仓库:https://github.com/lizhijie429/dsh-push-privacy-guard
社区目录页:https://www.skillhub.cn/plugins/lizhijie429/dsh-push-privacy-guard
当前版本 0.2.1,许可证 MIT,要求 DSH >=0.2.1-0 <0.3.0。

核心功能

提交前与推送前检查

  • commit:扫描将要进入记录的暂存区;同一命令里先 git add、带 pathspec / -i / --include、commit -a 时按 git diff HEAD 覆盖工作区并补扫未跟踪文件;同时检查 -m / -F / --trailer 提交信息。无法预读的信息(如 -F -、命令替换)按「扫描不完整」处理,默认仍要求授权。
  • push:只读计算本次 push 实际上传范围(支持 git -C、多 refspec、remote、--force、--all、--mirror、--delete、gh repo sync),按提交逐个扫描 diff 与提交信息,并检查 tag 消息。
  • git push --dry-run / -n:不上传内容,直接放行、不弹审批。

首次推送与全仓扫描

某个仓库第一次经 DSH 推送时,可询问是否先做全仓扫描(配置 fullScanOnFirstPush:ask / always / never)。全仓扫描用 --full-tree 覆盖 HEAD 下 git 已跟踪 文件;.gitignore 忽略的内容不参与。之后该仓库只检查本次提交/推送增量。

审批与白名单

命中且不在白名单时调用 ctx.approval.request(),在 Web UI 展示脱敏后的命中清单。批准 = 本次放行,且(默认)把项写入白名单;拒绝或取消 = 阻止命令。白名单只存掩码与稳定指纹(sha256(规则 id + 命中值) 截断),同一敏感值跨文件、跨仓库授权一次即可。扫描失败、超时、git 查询失败或拿不到授权时 fail-closed,不会静默放行。

内置规则与白名单管理

V1 内置规则覆盖私钥块、常见云与 SaaS Token(AWS、GitHub/GitLab/npm、OpenAI、Slack、Google API Key 等)、JWT、Bearer、赋值式 secret(含中文键名)、数据库/消息队列连接串、本机路径(Windows/UNC/POSIX/~/.ssh)、邮箱、大陆手机号与身份证、内网 URL 等;占位符与示例值有过滤,ignorePaths 默认跳过锁文件、构建产物、node_modules 等。

用户专属斜杠命令 /privacy-guard(不产生模型消息)可 list/remove/clear/status/repos/reset/scan/help;底层 state/whitelist.json 可手改、即时生效。配置由 Cordis Config(Schemastery)校验,带 .volatile() 的字段可在 DSH 设置页热更新,无需重启 Host。

安装与启用

插件以当前 DSH 进程权限运行;安装前建议自行查看仓库源码与 MIT 许可证。npm 包尚未发布,以 Git 源或市场索引安装为准。

命令行添加(desktop profile 示例)

dsh plugin --profile desktop add https://github.com/lizhijie429/dsh-push-privacy-guard

通过自定义插件市场

  1. 在 DSH 中启用实验性 自定义插件市场(插件 → 实验性插件 → 更多 → 自定义插件市场)。
  2. 在 插件 → 发现 → 索引源 粘贴市场索引 URL:
https://raw.githubusercontent.com/lizhijie429/dsh-push-privacy-guard/main/market/index.json
  1. 搜索 “Push Privacy Guard” 安装。

也可在 desktop 的 cordis.patch.yml 中按 README 用绝对路径 insert 挂载 index.mjs 并附带 config(如 fullScanOnFirstPush: ask),具体片段见仓库 README「安装」一节。

典型用法

日常 commit / push

启用插件且 enabled、interceptCommit、interceptPush 为默认 true 时,Agent 照常调用 git;若扫描到新敏感项,Web UI 会出现审批。用户确认后同类项进入白名单,后续不再重复询问。

管理白名单与自检

在 Web UI 命令面板执行(不会进入模型上下文):

/privacy-guard list
/privacy-guard remove <id前缀>
/privacy-guard clear confirm
/privacy-guard status
/privacy-guard scan

/privacy-guard scan 对当前会话仓库做全仓 tracked + 暂存区扫描并报告,不推送、不写白名单。

配置要点

在 profile 的 cordis.patch.yml 的 config: 下可调整例如:unresolvedRepo(定位不到仓库时 deny/allow)、persistentShellCommits(持久终端 deny/allow)、disableRules / extraRules、maxTotalBytes / gitTimeoutMs 等。非法枚举会在加载时报错;部分字段仅在 yml 中改数组/对象,需 profile 重载生效。完整字段表见仓库 README「配置」一节。

适用场景与注意

适合:经常用 DSH Agent 自动改代码并 commit/push 的开发者,希望在工具链上多一层「上传前看一眼」的护栏,并可用白名单平衡误报与重复打扰。

务必知晓:

  • 定位是降低误泄露概率,不能替代密钥轮换、远端 secret scanning、代码审查或最小权限策略。
  • 不覆盖人工终端与插件外的推送路径;模型理论上仍可写 state/whitelist.json,主体信任边界见仓库「已知限制」。
  • 社区目录 skillhub.cn 为独立生态索引,与 DeepSeek / 幻方无官方从属关系;DSH 本身遵循「一切皆插件」的扩展方式。

结尾

dsh-push-privacy-guard 在 DSH 工具执行 commit/push 之前做只读敏感信息扫描,用原生审批与白名单把「是否上传这段内容」交还给人。需要细节、规则表与 desktop/server 挂载示例时,以 GitHub README 为准:

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜