前言¶
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