前言¶
在 DeepSeek Harness (DSH) 中,webServer 路由通过最长前缀匹配进行分发,优先于 /api 网关的统一信任检查。这意味着每个插件作者必须自行实现浏览器信任围栏,以防止 DNS 重绑定等攻击,但大多数插件并未实现。此工具用于静态扫描插件代码,找出那些未正确实现围栏的 HTTP 路由。
核心功能¶
该插件是一个静态 linter,用于检查 DSH 插件的 HTTP 路由安全性:
- 静态扫描:针对
webServer注册的路由进行静态分析。 - Host 固定检查:确保路由在处理 Origin 或
sec-fetch-site标志之前,先固定 Host 头部为 loopback 或受信任的权威域名。 - Fallback 检查:检查
registerFallback,防止其作为未围栏的攻击面。 - 路径指定:支持扫描特定的配置文件路径或 Profile 目录。
- 引用解析:解析导入和导出,对非相对引用(exports, imports, tsconfig paths)发出警告。
使用方法¶
安装为 DSH 插件后,通过 CLI 命令运行扫描。
基础扫描¶
扫描默认的 Web Profile 目录($DSH_HOME/profiles/web):
dsh-route-fence scan
指定路径扫描¶
扫描指定的 Profile 路径:
dsh-route-fence scan /path/to/profile
退出代码¶
0:所有检查通过(Clean)。1:至少发现一个 FAIL。2:用法错误或 I/O 错误。
判定说明¶
插件对每个路由输出 PASS、WARN 或 FAIL 等级。
- PASS:处理程序在 Origin 处理之前,对 Host 头部进行了围栏检查。
- WARN:在围栏内部,Origin 或
sec-fetch-site在 Host 固定之前被读取;或者路由定义在扫描包之外,无法读取围栏,需人工确认。 - FAIL:没有 Host 检查;围栏比较 Origin 和 Host 但从未将 Host 固定为 loopback(可被 DNS 重绑定绕过);或者围栏存在但该处理程序从未调用。
- SKIP:无法读取源代码的 Bundle,不计入 Clean。
适用场景与注意事项¶
- 适用对象:DSH 插件开发者,特别是负责 HTTP API 和 Web 路由构建的开发者。
- 扫描范围:仅扫描包发布的文件(
package.json的files字段),未声明files则扫描整个包。 - 局限性:
- 基于启发式(源文本分析),而非完整的数据流分析。
- 无法检查通过包装(wrapping)或运行时配置安装的围栏。
- 非相对引用(如
package.jsonexports, imports, tsconfig paths)无法被扫描,结果为 WARN。 - 可能报告误报(False Verdicts),这被视为 Bug。
结语¶
该工具帮助开发者快速定位插件中缺失或错误的浏览器信任围栏。建议在开发流程中集成此检查,以消除潜在的安全隐患。更多详情与源码,请访问插件目录或GitHub 仓库。