dsh-plugin-safety:DSH 插件安装时安全门控

前言

DeepSeek Harness (DSH) 的生态高度依赖第三方插件。在插件市场或社区市场安装来源不明的插件时,直接执行可能带来代码注入或权限风险。dsh-plugin-safety 是一个安装时安全门控插件,它拦截市场发起的安装请求,在代码执行前对 npm 或 GitHub 来源的插件进行静态扫描与元数据审查。通过评分机制,安全的插件静默放行,有风险的插件会弹出审查报告,由用户决定是否继续安装。

核心机制

本插件通过包裹 DSH 的 window.fetch 拦截安装请求。当用户在市场界面点击安装时,请求会被拦截并转发至宿主侧的 /api/plugin-safety/check 接口。

扫描过程主要分两部分:

  1. 源码静态扫描:针对 npm 的 tarball 或 GitHub 的仓库归档,提取 JS/TS 源码。检查内容包括生命周期脚本(install/prepare)、远程代码执行链(eval/new Function)、硬编码公网 IP、持久化机制(自启动脚本)、密钥文件访问以及子进程执行等。
  2. 元数据信号分析:获取 npm registry 或 GitHub API 的元数据。检查发布时间(<7 天)、下载量、stars 数量、许可证声明、仓库归档状态以及包名相似度(仿冒检测)。

扫描结果返回 verdict(安全/谨慎/高风险/未知)。若为 safe,请求原样放行;否则弹出窗口展示评分与证据,用户可选择“仍然安装”、“取消”或“信任并加入白名单”。

安装与启用

安装本插件需要将其加入 DSH 的桌面 profile。

  1. 进入 profile 目录:
    cd ~/.dsh/profiles/desktop
  1. 使用 pnpm 添加插件(请替换为实际路径):
    pnpm add file:/绝对路径/dsh-plugin-safety
  1. 修改 profile 的 package.json,在 dsh.profile.bundles 列表中追加 dsh-plugin-safety。
  2. 重启 DSH Desktop 使插件生效。

配置项

在 DSH 设置页的“插件 → 安装安全”中可调整以下参数:

  • 启用检查:默认开启。关闭后所有安装请求将直接放行,不进行扫描。
  • 需要确认的最低风险:
    • caution:任何需要确认的风险都会弹出对话框。
    • risky:仅对高风险(≥20 分)的插件拦截。
  • 白名单:支持 npm 包名、GitHub 仓库地址或 URL。命中规则直接放行,不经过评分。
  • 黑名单:同上。命中规则直接返回高风险拦截。

判定规则

插件基于启发式规则对插件进行评分,总分决定风险等级。

静态扫描得分项

  • 高危(12-14分):远程代码执行链(下载+eval+子进程)、动态代码执行(eval/new Function/vm)、可疑生命周期脚本(下载执行)、硬编码公网 IP 或云元数据地址、数据外传信号、持久化机制、密钥路径与文件 IO 同现、子进程执行/写主目录。
  • 中危(8-10分):监听端口、终端命令解释器调用、生命周期脚本(install 8分,prepare 4分)、大体积 Base64 载荷、解密例程、原生模块链、访问密钥环境变量、明文 HTTP 外联。
  • 低危(3-5分):fetch 外部 URL、安装时编译链、原生构建声明(gypfile)。
  • 极低危(1分):缺失完整性校验、单一维护者。

元数据信号加分项

  • 新发布 <7 天:+7
  • 下载量极低:+3~5
  • 无仓库或许可证:+2~3
  • stars 极低:+2~5
  • 仓库已归档:+5
  • 仿冒包名(Levenshtein ≤2 且剥离标点):+8

风险等级判定

  • risky:总分 ≥ 20 分。
  • caution:总分 ≥ 8 分,或存在 critical 发现,或扫描不完整(如归档损坏、文件数超限)。
  • safe:其他情况。
  • unknown:目标无法解析或扫描失败。

局限与注意

本插件基于启发式规则,而非数学证明,因此存在误报或漏报风险。它不提供代码层面的绝对安全保证。

  • 拦截范围:仅拦截市场 UI 发起的安装(包括 Community Market 的 preview/execute 双步)。通过终端直接执行 pnpm add 或手动修改 profile 不经过此流程。
  • 更新检查:市场的“更新”请求体不包含来源 URL,因此无法对更新进行安全检查。
  • API 限流:若 GitHub API 触发限流,元数据信号将缺失(计 2 分并提示),源码扫描不受影响。
  • 依赖来源:插件本身通过 npm 发布,安装时会扫描它自己,形成闭环。

适用场景

适合对插件安全性有较高要求的开发者,或在使用社区市场时,希望对未知名来源的包进行二次审查的场景。

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

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

小夜