dsh-access-gate
github.com/bamboostrip/dsh-access-gate
DSH(DeepSeek Harness)远程访问认证门禁插件:解决"经 nginx 公网域名转发访问时,`/api/*` 全部 403"的问题 —— 认证通过后所有被浏览器信任护栏拦截的接口(含 `settings.*`、`credentials.*` 等 loopback 钉死的特权接口)全部可用;本机 `127.0.0.1` 访问不受影响;卸载插件一切还原,零残留、不污染用户配置。
作者原文(英文)
DSH plugin: password gate for remote (non-loopback) /api access (passwordless by default), unblock the loopback-pinned privileged endpoints, restore everything on uninstall, and give the local 127.0.0.1 user the native OS folder picker for workspace selec
中文简介由 DeepSeek 模型翻译,仅供参考。
检测报告
能力清单
- 发起网络请求
network需留意2 处命中lib/client.js:48return fetch(PICK_PATH, { method: "POST" }).then(function (response) {src/client.js:48return fetch(PICK_PATH, { method: "POST" }).then(function (response) {- 看请求发往哪些域名。发往作者自己的后端是常见做法。
- 接触凭据或密钥
credentials一般216 处命中lib/client.js:17* - 密码存 credentials 域(官方惯例,同 Models 页面的 API key):lib/client.js:18* ~/.dsh/.credentials.yaml,进程环境变量 DSH_GATE_PASSWORD 天然优先;lib/client.js:19* - 控件 write-only(SecretField 风格):只显示"已配置/未配置"状态,lib/client.js:21* - 保存后 host 经 credentials/reference-updated 实时生效,无需重启。- 看它读取哪些凭据、发往哪里。用于登录自己的服务是正常的。
- 读取环境变量
reads-env一般2 处命中lib/index.js:784if (process.env.DSH_GATE_PICKER_TEST !== "1")src/index.ts:790if (process.env.DSH_GATE_PICKER_TEST !== "1") path = await picker.pick(controller.signal);- 环境变量里常混有密钥。看它是否把整个 env 都读走。
- 动态加载模块
dynamic-import一般1 处命中NOTES.md:115**为什么运行时还是 JS**:DSH 的插件 loader 用原生 `import()` 加载插件文件- 动态导入本身无害,但会让依赖关系难以静态审阅。
逐条扫描明细
| 能力 | 标识 | 关注度 | 命中次数 |
|---|---|---|---|
| 发起网络请求 | network | 需留意 | 2 |
| 接触凭据或密钥 | credentials | 一般 | 216 |
| 读取环境变量 | reads-env | 一般 | 2 |
| 动态加载模块 | dynamic-import | 一般 | 1 |
这份报告的口径
扫描读的是包里的源码,全程不执行第三方代码。 本次读了 16 个文件,扫描于 2026-10-14。 命中次数只说明源码里出现过这类调用,不说明行为好坏——一个插件读写文件 500 次和 1 次 都会被记为「读取文件」。这是能力清单,不是信任评分,也不是安全结论: 没扫出来的能力可能只是写法没被规则覆盖。
依赖安全公告
已查询这个插件声明的全部依赖,没有匹配到已公开的安全公告。(含 DSH 框架包在内的 @deepseek-ai/* 不作查询——那是运行时自己的问题,不是插件的。)