dsh-market 插件市场安全指南:4 道防线看清一键装插件的边界
【免费下载链接】dsh-marketThe plugin market inside DeepSeek Harness — browse, search, one-click install · DSH 可视化插件市场项目地址: https://gitcode.com/gh_mirrors/ds/dsh-market
你打开 DeepSeek Harness,在插件市场里挑到一个社区插件想点安装,又因为是第三方代码,心里会打鼓:装进来之后,边界到底在哪?dsh-market 是 DSH 内置的可视化插件市场,负责浏览、搜索并一键安装社区目录。它不是独立服务,而是运行在你自己的 DSH 进程内部。读完这篇文章,你能说清楚它防住了哪些风险、哪些开关需要你自己把关。
先回答一个疑问:“商店”不该是最不用担心的吗?
很多人的直觉是:插件市场可怕的地方在插件本身,市场只是“商店 UI”。事实恰恰相反,dsh-market 同时握着三种能力:它向宿主 Web 服务器注册 HTTP 路由,能读写你的 profile 目录,安装时还会代你真实执行pnpm、dsh plugin、git等命令。SECURITY.md 也点明了这一点:最值得报告的安全问题都关于“越界”——未经宿主认证就到达变更路由的安装请求、写到 profile 之外的安装动作、以及对插件自带元数据过度信任的地方。
安装端点同源校验:怎么防其他网页“遥控”你
安装端点是市场里唯一会执行 shell 命令的地方。如果任何网页都能驱动它,你访问过的任何恶意站点都成了操作你本地机器的入口,DNS rebinding 就是它最容易走的攻击路径。
因此这道端点被当成整个系统的咽喉,src/routes.ts 的开篇注释把规则写得很直白:
Security: the install route executes a shell command, so it accepts only same-origin POSTs and only sources present in the curated registry.
具体校验在 src/http.ts:请求必须是同源 POST,Origin 需与 Host 一致;Host头还必须是回环地址(127.0.0.1/localhost/[::1])——攻击者可以把自家域名解析到 127.0.0.1 让 Origin 与 Host“恰好相等”,但 Host 不是回环就露馅了;Origin: null与空 Origin 一律拒绝。再叠加一层白名单:安装来源必须存在于精选注册表(src/registry.ts),绕过界面直接构造请求也装不了目录之外的包。
边界说明:若你通过反向代理或局域网主机名访问宿主,Host 不是回环地址,此时只有宿主显式声明的 trusted-host才被额外放行,未声明的名字依旧拒绝(src/http.ts)。
构建脚本默认拦截机制:怎么对待安装时跑代码的包
npm 生态的老问题:恶意包可以把任意代码藏在postinstall等构建脚本里,你“安装”的那一刻它就执行了。
市场的策略是默认全挡、逐包显式放行。它依赖 pnpm ≥10 的原生机制:不在白名单里的包,构建脚本一律不执行;你确实要放行某个包时,src/profile.ts 的setAllowBuilds会把它写进 profile 的pnpm-workspace.yaml的allowBuilds块,且写入前做严格的形式校验——npm 包名、git 克隆地址、固定 commit 的压缩包地址各有自己的规则,其余格式一律拒写,防止任意文本混进会被 pnpm 解析的文件。
边界说明:“允许构建”永远是你的主动动作,只对具体那个包生效,和一键全开无关。
数据去哪:零遥测与不落地凭据
工具持有的能力越多,越该担心“看不见的地方在传东西”——市场同时有路由、文件读写和 shell,天然具备数据外发的条件。
dsh-market 的立场是零遥测:没有账号、没有官方服务器、没有埋点,官方隐私页明确写了插件无遥测、它无法看到你安装了什么(site/privacy.zh.html)。它唯一的网络行为,是按需拉取精选目录和你主动发起的安装、下载、备份。连“导出日志排障”也是脱敏的:主目录路径会被替换成~(src/log-redaction.ts);Gist 备份用的 token 由你每次操作时临时粘贴,用完即弃、不落地存储(SECURITY.md)。
边界说明:备份导出的内容是你 profile 配置的原样,可能包含凭据文件,因此导出和上传前 UI 都会明确警告(src/backup.ts)。
容易被忽略的边界
| 设计点 | 具体规则 |
|---|---|
| 一键重启 | 端点要求回环客户端直连,转发请求一律拒绝,并原样复现 DSH 入口、参数与环境(src/restart.ts) |
| 托管进程保护 | 宿主是 systemd 服务进程时重启按钮自动隐藏,避免连宿主带 cgroup 一起被杀(README.md) |
| WebDAV 备份 | 仅 https、拒绝内网地址目标、密码永不存浏览器(src/backup.ts) |
| Gist 同步 | 带 token 的请求直连 api.github.com,凭据不经过公共加速服务(README.md) |
| 来源白名单 | 安装只认精选 awesome-dsh-plugin 注册表中的来源,其余拒绝(README.md) |
| 终端类插件 | 安装进 web profile 前先打标提醒(README.md) |
上手三步:装插件前自查
设置页里与托管相关的关键开关长这样:
📋 每次安装前花一分钟过一遍:
- 先看来源:确认卡片来源在精选注册表中、作者与 star 数对得上;终端/CLI 类插件带醒目标记,先看标记再决定。
- 再确认构建授权:安装若提示需要允许构建脚本(
allowBuilds),先判断这是不是那个包该做的事,再逐包放行,不批量点头。 - 最后关掉重启权限:如果你的 DSH 跑在 systemd / launchd / pm2 下,在设置里把“Allow restart”关掉,让进程生命周期归托管方管。
它的逻辑可以浓缩成一句:能执行命令的那条路由,由同源 POST、回环校验、注册表白名单三层看住;安装时跑代码这件事,交给 pnpm 默认拦截、显式放行——这套边界,比“插件多不多”更值得记牢。
想深入阅读:README.md 的 Security 章节、SECURITY.md 的漏洞报告指南、site/privacy.zh.html 的隐私说明。
【免费下载链接】dsh-marketThe plugin market inside DeepSeek Harness — browse, search, one-click install · DSH 可视化插件市场项目地址: https://gitcode.com/gh_mirrors/ds/dsh-market
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考