前言¶
DeepSeek Harness (DSH) 的 Web GUI 提供了便捷的交互界面,但浏览器的安全策略限制了部分功能。crypto.randomUUID 仅在安全上下文(HTTPS 或 localhost)中存在。当你在局域网内通过纯 HTTP 访问 DSH(例如从手机访问 http://192.168.x.x:3080)时,浏览器无法识别该函数,导致 RPC 调用崩溃。这表现为工作区列表无法加载、目录选择器失效、会话无法创建,而本地 http://127.0.0.1:3080 则正常工作。
这是什么¶
dsh-secure-context-fix 是一个由 Li-Mingshuang 维护的小型 DSH 插件。它通过注册 webServer.tapIndex 变换,在 DSH bundle 代码运行前,向 Web GUI 的 HTML 页面注入一段脚本。该脚本提供了一个基于 crypto.getRandomValues() 的 crypto.randomUUID 实现,从而在非安全上下文(HTTP)下恢复该函数的功能。
核心功能¶
- 注入 polyfill:在 DSH bundle 代码执行前,注入
crypto.randomUUID的实现。 - HTTP 局域网支持:允许 Web GUI 在非 HTTPS 环境下(如 LAN HTTP)正常工作。
- 注册变换:通过
webServer.tapIndex机制拦截并修改 HTML 输出。 - 无侵入性:无需修改官方源码,无需构建步骤。
安装与启用¶
在包含插件包的目录下执行以下命令安装:
dsh plugin --profile web add ./dsh-secure-context-fix
安装完成后,重启 Web 配置文件以加载插件:
dsh --profile web
配置与使用¶
要让 Web GUI 在局域网内被访问,必须将服务绑定到所有网络接口。由于 DSH CLI 默认出于安全考虑拒绝 --host 0.0.0.0,需通过配置文件进行修改。
- 配置绑定地址:
在web配置文件中添加或修改以下cordis.patch.yml内容:
# $DSH_HOME/profiles/web/cordis.patch.yml
- id: webserver
config:
host: '0.0.0.0'
port: !!js ctx.webStartup.port ?? 3080
- 配置防火墙:
建议仅允许局域网子网访问,避免直接暴露。以下 PowerShell 命令将规则限制在192.168.0.0/24网段:
New-NetFirewallRule -DisplayName "dsh web 3080 (LAN)" -Direction Inbound -Protocol TCP -LocalPort 3080 -Action Allow -Profile Private -RemoteAddress 192.168.0.0/24
- 访问:
确保手机与 DSH 设备在同一 Wi-Fi 下,打开浏览器访问http://<your-LAN-IP>:3080。此时工作区列表、目录选择器及会话创建功能应恢复正常。
安全与注意¶
- 权限风险:将 Web GUI 绑定到
0.0.0.0会向任何能访问该端口的人暴露远程代码执行级别的控制权。 - 网络隔离:务必使用防火墙规则限制访问源,仅允许受信任的局域网子网访问端口 3080。
- 安装来源:从 Git 仓库安装时,若包包含
prepare脚本,首次安装可能需要允许构建(此插件不包含构建步骤,故无需允许)。
结尾¶
这是一个临时性的修复方案,旨在解决 GitHub 讨论区反馈的问题,直到官方仓库将 crypto.randomUUID 的调用替换为 getRandomValues()。对于无法修改源码的用户,该插件提供了直接可用的解决方案。
目录页:dsh-secure-context-fix - SkillHub
源码地址:dsh-secure-context-fix - GitHub