前言¶
在 DSH 插件生态里,一个插件可以在浏览器 HTTP 载体上注册自己的前缀,而路由分发采用「最长前缀优先」策略。这意味着,比内核 /api 更长的插件前缀会先于内核的准入检查执行,于是这条路由是否需要凭据完全取决于插件自己实现。
社区里的两个样本结论相反:dsh-our-free-model 用 connection.requestRejection 拦住未授权请求(返回 401),而 dsh-bili-scroll 2.0.4 只做了结构化栅栏(放行 200)。从目录页面看不出来装的是哪一种。本插件把它变成可测量的。
这是什么¶
anguis-l/dsh-plugin-trust-audit 是 DSH 的只读审计插件,由 Anguis-L 维护,分类为 admin-security。它通过探测已安装插件真正注册的 HTTP 路由,判断这些路径是否真的做了鉴权栅栏(fenced / open / absent / unknown)。
核心功能¶
判定口径¶
对每个候选路径发三组只读 GET 探测,每组回答不同的问题:
| 探测 | 头 | 回答什么 |
|---|---|---|
| 无凭据 | 无 | 裸奔的调用者能不能拿到数据 |
| 跨端口 Origin | Origin: http://127.0.0.1:65535 |
本机别的端口上的页面能不能驱动它(只比主机名、不比端口时会放行) |
| 跨站 Origin | Origin: https://example.invalid |
外部网页能不能驱动它 |
判定:
| 状态码 | 判定 | 含义 |
|---|---|---|
| 401 / 403 | fenced | 栅栏生效 |
| 2xx | open | 无鉴权可达 |
| 404 | absent | 没注册路由,不构成风险 |
| 其它 / 超时 / 连不上 | unknown | 不等于安全 |
自动发现路由(0.2.0 起)¶
0.1.x 探的是两条硬编码路径,其中一条根本不存在。0.2.0 改成从已安装插件的代码里读出它们真正注册的路由:
- 匹配
<任何别名>.register({ kind, path, handler })—— 不能只匹配webServer.register,因为实际代码普遍先起别名 - 遇到
kind: 'prefix'会连带探测子路径(/status、/config) - 报告里的
source字段说明路径来源:discovered/explicit/fallback
只读¶
只发 GET,从不发写请求,所以审计不会改变它正在检查的状态。
安装与启用¶
# 从 GitHub Release 直链安装(不需要 npm 账号,不需要 git)
dsh plugin --profile <你的profile> add https://github.com/Anguis-L/dsh-plugin-trust-audit/releases/download/v0.1.0/dsh-plugin-trust-audit-0.1.0.tgz
装完重启一次 dsh(bundle 层要重启才组装),然后在会话里直接让 agent 调用 plugin_trust_audit。
典型用法¶
plugin_trust_audit() # 自动发现 + 探测
plugin_trust_audit({ origin: 'http://127.0.0.1:61782' })
plugin_trust_audit({ profileDir: 'C:/Users/you/.dsh/profiles/desktop' }) # 指定要扫哪个 profile
plugin_trust_audit({ paths: ['/api/my-plugin/config'] }) # 只探指定路径
只审计回环地址。对它机地址发起探测属于未授权扫描,本工具不做。
适用场景与注意¶
适用场景¶
- 想确认已安装插件是否真的做了鉴权栅栏
- 需要了解某个端口上哪些路径是无凭据可达的
- 希望通过只读探测来评估安全风险,而不改变系统状态
注意事项¶
- 判定基于响应状态码,不构成完整安全审计:它不能证明一条返回 401 的路由内部没有别的洞,也不能发现只在特定方法/参数下才触发的问题
- 自动发现是读代码猜路径,不是运行时注册表查询:路径写得很动态的插件可能扫不到;子路径只探
/status、/config两个常见名 unknown是三值判定的关键:把”判不了”糊成”安全”,是这里唯一真正危险的结果- 在真实宿主上测过:一条没被任何插件注册的路径(比如
/api/nonexistent-xyz)返回的是 401 而不是 404,因为内核自己的/api前缀先接住了它。因此absent在实践中很少出现
插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。
结尾¶
本插件的价值在于把”看起来装了插件、有路由”和”真正做了鉴权栅栏”之间的差距变成可测量的数据。同一个端口上,两个插件一个 open 一个 fenced —— 这就是本工具存在的理由。
- 目录页:https://www.skillhub.cn/plugins/Anguis-L/dsh-plugin-trust-audit
- GitHub:https://github.com/Anguis-L/dsh-plugin-trust-audit