前言¶
DeepSeek Harness (DSH) 的生态高度依赖第三方插件。在插件市场或社区市场安装来源不明的插件时,直接执行可能带来代码注入或权限风险。dsh-plugin-safety 是一个安装时安全门控插件,它拦截市场发起的安装请求,在代码执行前对 npm 或 GitHub 来源的插件进行静态扫描与元数据审查。通过评分机制,安全的插件静默放行,有风险的插件会弹出审查报告,由用户决定是否继续安装。
核心机制¶
本插件通过包裹 DSH 的 window.fetch 拦截安装请求。当用户在市场界面点击安装时,请求会被拦截并转发至宿主侧的 /api/plugin-safety/check 接口。
扫描过程主要分两部分:
- 源码静态扫描:针对 npm 的 tarball 或 GitHub 的仓库归档,提取 JS/TS 源码。检查内容包括生命周期脚本(install/prepare)、远程代码执行链(eval/new Function)、硬编码公网 IP、持久化机制(自启动脚本)、密钥文件访问以及子进程执行等。
- 元数据信号分析:获取 npm registry 或 GitHub API 的元数据。检查发布时间(<7 天)、下载量、stars 数量、许可证声明、仓库归档状态以及包名相似度(仿冒检测)。
扫描结果返回 verdict(安全/谨慎/高风险/未知)。若为 safe,请求原样放行;否则弹出窗口展示评分与证据,用户可选择“仍然安装”、“取消”或“信任并加入白名单”。
安装与启用¶
安装本插件需要将其加入 DSH 的桌面 profile。
- 进入 profile 目录:
cd ~/.dsh/profiles/desktop
- 使用 pnpm 添加插件(请替换为实际路径):
pnpm add file:/绝对路径/dsh-plugin-safety
- 修改 profile 的
package.json,在dsh.profile.bundles列表中追加dsh-plugin-safety。 - 重启 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 发布,安装时会扫描它自己,形成闭环。
适用场景¶
适合对插件安全性有较高要求的开发者,或在使用社区市场时,希望对未知名来源的包进行二次审查的场景。