🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

插件准入卫士 RyeSama/dsh-plugin-guard

DeepSeek Harness
RyeSama12 天前有提交已提供中文文档扫描:含敏感能力

安装前扫描插件权限与危险代码,守住准入关

29.2/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add RyeSama/dsh-plugin-guard
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · security
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 12 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 29 处,展示前 29 条)
  • 读取本地文件
    plugins/dsh-guard-tool/spec.js:11
    const raw = await readFile(join(root, 'package.json'), 'utf8')
  • 写入本地文件
    src/audit/sidecar.ts:24
    await mkdir(dirname(this.path), { recursive: true })
  • 写入本地文件
    src/audit/sidecar.ts:33
    await mkdir(dirname(this.path), { recursive: true })
  • 写入本地文件
    src/audit/sidecar.ts:34
    await appendFile(this.path, JSON.stringify(entry) + '\n', { encoding: 'utf8', mode: 0o600 })
  • 读取本地文件
    src/audit/sidecar.ts:40
    text = await readFile(this.path, 'utf8')
  • 执行外部命令来自配置/变量
    src/cli/doctor.ts:19
    ? spawn(process.env['ComSpec'] ?? 'cmd.exe', ['/d', '/s', '/c', [command, ...args].join(' ')], {
  • 执行外部命令来自配置/变量
    src/cli/doctor.ts:22
    : spawn(command, args, { windowsHide: true })
  • 请求外部主机registry.npmjs.org
    src/cli/doctor.ts:59
    const response = await fetch('https://registry.npmjs.org/-/ping', { signal: controller.signal })
  • 发起网络请求
    src/cli/doctor.ts:59
    const response = await fetch('https://registry.npmjs.org/-/ping', { signal: controller.signal })
  • 写入本地文件
    src/cli/doctor.ts:82
    await mkdir(dirname(path), { recursive: true })
  • 读取本地文件
    src/cli/doctor.ts:83
    await access(dirname(path), constants.W_OK)
  • 写入本地文件
    src/cli/init.ts:106
    await mkdir(dir, { recursive: true })
  • 读取本地文件
    src/scanner/analyze.ts:98
    const buffer = await readFile(joinInside(root, rel))
  • 发起网络请求
    src/scanner/npm.ts:53
    const response = await fetch(url, {
  • 发起网络请求
    src/scanner/npm.ts:134
    const response = await fetch(meta.tarball, {
  • 写入本地文件
    src/scanner/npm.ts:171
    await mkdir(directory, { recursive: true })
  • 读取本地文件
    src/scanner/resolve.ts:53
    const info = await stat(asPath)
  • 删除本地文件递归
    src/scanner/resolve.ts:114
    await rm(directory, { recursive: true, force: true })
  • 写入本地文件
    src/scanner/tar.ts:68
    await mkdir(join(destDir, safeRelativePath(dir)), { recursive: true })
  • 写入本地文件
    src/scanner/tar.ts:85
    await mkdir(dirname(target), { recursive: true })
  • 写入本地文件
    src/scanner/tar.ts:86
    await writeFile(target, body, { mode: 0o644 })
  • 读取本地文件
    src/util/fsx.ts:32
    await access(path, constants.F_OK)
  • 读取本地文件
    src/util/fsx.ts:41
    const info = await stat(path)
  • 读取本地文件
    src/util/fsx.ts:43
    const buffer = await readFile(path)
  • 写入本地文件
    src/util/fsx.ts:74
    await mkdir(dirname(path), { recursive: true })
  • 写入本地文件
    src/util/fsx.ts:84
    await rename(temp, path)
  • 删除本地文件
    src/util/fsx.ts:86
    await rm(temp, { force: true })
  • 读取本地文件
    src/util/fsx.ts:134
    entries = await readdir(directory, { withFileTypes: true })
  • 读取本地文件
    src/util/fsx.ts:154
    const info = await lstat(abs)
扫描于 2026/11/1(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
涉及外部主机:registry.npmjs.org

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-tools
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DSH 插件的安全治理与准入层:一条命令扫描、dsh.permissions 规范、信任指数、运行时审计适配器。

README

由 DeepSeek 最新模型翻译生成
npx dsh-plugin-guard-cli scan ./my-plugin # 一条命令,不用安装、不用配置、不用登录 干净的插件会输出 PASS 100/100 — 0 high · 0 medium · 0 low;有风险时直接给出问题、文件行号和修复命令。 dsh-plugin-guard 在安装 DSH 插件前、发布自己的插件前、以及在 CI 里运行的安全准入检查。 DSH 插件是带有 dsh 字段的 npm 包,会被组合进 DSH 宿主进程。这个边界上没有沙箱:插件与 DSH 同权限运行。本工具不改变这一点,它只把"即将发生的决定"提前变得可见: - scanner — 只读取、绝不执行插件代码,报告它被允许做什么 - 权限清单 — 本项目提出的 dsh.permissions 约定,让插件声明自己读什么、写什么、执行什么、发往哪里 - 信任索引 — 本地记录你审查过的源码哈希,静默重发布会被发现 - 运行时审计适配器 — 有接口、有 sidecar 实现,并如实说明 DSH 今天没有开放什么 它不是沙箱,不是杀毒软件,也不能代替你自己读代码。
展开完整文档(README 剩余 1 节)
npx dsh-plugin-guard-cli scan ./my-plugin # 一条命令,不用安装、不用配置、不用登录
干净的插件会输出 PASS 100/100 — 0 high · 0 medium · 0 low;有风险时直接给出问题、文件行号和修复命令。

dsh-plugin-guard

在安装 DSH 插件前、发布自己的插件前、以及在 CI 里运行的安全准入检查。

DSH 插件是带有 dsh 字段的 npm 包,会被组合进 DSH 宿主进程。这个边界上没有沙箱:插件与 DSH 同权限运行。本工具不改变这一点,它只把"即将发生的决定"提前变得可见:

- scanner — 只读取、绝不执行插件代码,报告它被允许做什么
- 权限清单 — 本项目提出的 dsh.permissions 约定,让插件声明自己读什么、写什么、执行什么、发往哪里
- 信任索引 — 本地记录你审查过的源码哈希,静默重发布会被发现
- 运行时审计适配器 — 有接口、有 sidecar 实现,并如实说明 DSH 今天没有开放什么

它不是沙箱,不是杀毒软件,也不能代替你自己读代码。

扫描内容

| 类别 | 会被标记的例子 |
| DSH 清单 | 缺少 dsh 字段、bundle.patch 指向未随包发布的文件、DSH 版本范围无法解析 |
| npm 状态 | 未发布、已废弃、本地版本比已发布版本新 |
| 权限 | 没有 dsh.permissions、声明非法、代码用了没声明的能力 |
| 危险代码 | child_process、eval/new Function、vm.runIn、动态 require/import、process.binding、混淆载荷 |
| 安装脚本 | preinstall、install、postinstall —— 在任何人审查之前就执行的代码 |
| 依赖 | 缺 lockfile、 / latest / git / http 版本、依赖面过大 |
| 网络 | 代码里写死、却没有声明的目标主机 |
| 来源完整性 | 包哈希与你索引里记录的不一致、发布者变化 |

完整规则与严重级别:npx dsh-plugin-guard-cli rules。

命令

npx dsh-plugin-guard-cli scan ./my-plugin
npx dsh-plugin-guard-cli scan ./my-plugin --json
npx dsh-plugin-guard-cli scan dsh-startup-screen-repair --check-publish
npx dsh-plugin-guard-cli doctor
npx dsh-plugin-guard-cli init ./my-plugin --dry-run
npx dsh-plugin-guard-cli index add ./my-plugin
npx dsh-plugin-guard-cli index list
npx dsh-plugin-guard-cli index verify ./my-plugin # 复核后代码有没有被改过
npx dsh-plugin-guard-cli audit status

退出码

| 退出码 | 含义 |
| 0 | 通过,或只有提示 |
| 1 | 存在 high 问题(或加了 --fail-on-medium 时的 medium 问题) |
| 2 | 用法错误:未知参数、未知规则 id、--max-files 非法 |
| 3 | 扫描无法进行:目标不存在、网络失败、package.json 读不了 |

零配置

没有配置文件,也不需要 init。默认:所有规则开启、本地目录扫描不联网、输出人类可读报告、高危即非零退出。可调项只有参数:

--json、--offline、--check-publish、--only <ids>、--ignore <ids>、--fail-on-medium、--dsh-version <v>、--max-files <n>、--record、--verbose。

声明权限

dsh.permissions 是本项目提出的约定,DSH 目前不会读它,扫描器也无法在运行时强制执行——它只检查声明是否存在、是否合法、是否与代码实际行为一致。

字段与语义见 docs/permissions-spec.md(英文)。

信任索引

默认位置 ~/.dsh-plugin-guard/index.json,可用 DSH_GUARD_INDEX 覆盖。按 name@version 记录:包哈希、目录树哈希、发布者、扫描结论、扫描时使用的 DSH 版本。没有索引也能扫描,只是对 registry 包会标注"来源未验证",而不是假装安全。

运行时审计:哪些是真的

DSH 目前没有公开的插件审计事件流,也没有进程内隔离。因此本项目提供:

- 文档化的 RuntimeAuditAdapter 接口;
- sidecar 实现:把 NDJSON 事件追加到 ~/.dsh-plugin-guard/audit.ndjson;
- audit status:用白话说清楚"没有官方钩子",而不是伪造能力。

详见 docs/audit-adapter.md 与 docs/threat-model.md。

在 DSH 里使用

同一个扫描器也打包成了 DSH 插件 bundle,agent 可以在安装前自己先查一遍:

dsh plugin --profile desktop add dsh-plugin-guard-tool

它注册一个工具 plugin_guard:传目录或 npm 包名,返回判定、原因和下一条命令——和命令行同一份输出,只是不用切终端。

装之前先扫一下 dsh-plugin-gate

FAIL 0/100 · 1 高危 · 1 中危 · 2 低危 HIGH security/dangerous-api Evaluates code at runtime (lib/rules.js:136)

这个 bundle 没有客户端代码,所以桌面 UI 里不会多出任何面板。它是独立的 npm 包(plugins/dsh-guard-tool),因为 DSH 是按 manifest 解析 bundle 的:一个包要么是 bundle、要么是 CLI,两边都沾会让"准入"这件事说不清楚。

非目标

- 不是沙箱:DSH 加载插件后,它无法阻止恶意代码。
- 不是代码审计:它找模式,不判断意图。
- 不替代 npm audit 或 lockfile。
- 绝不运行、导入、安装或求值被扫描的插件。
- 不读取你的 .env、凭据、SSH 密钥或浏览器数据;扫描器会跳过这些路径,并拒绝扫描整个用户目录。

安全声明

扫描器只读文件:不会 require/import 被扫描的包,不执行 postinstall,不解析其依赖,也不往被扫描目录里写任何东西。只有 scan <npm 包名>、--check-publish、index add <npm 包名> 和 doctor 会联网。报告不含机密:路径都相对于包根目录。

如果你能让扫描器执行被扫描的代码,那是安全漏洞,请开 issue。

开发

npm ci
npm run verify # lint + typecheck + test + build
npm run smoke # 打包后用 npx 跑 tests/fixtures/clean-plugin

需要 Node 20+,没有原生依赖,发布包内已打包 commander 与 zod。

许可证

MIT
预览分享卡片长什么样 ↓RyeSama/dsh-plugin-guard
分享 · DeepSeek Harness Hub
RyeSama/dsh-plugin-guard

安装前扫描插件权限与危险代码,守住准入关

回到顶部