前言¶
DeepSeek Harness (DSH) 的核心能力之一是 web_fetch,它允許智能體通過聯網工具獲取外部信息。然而,默認的網絡請求實現可能存在服務器端請求僞造 (SSRF) 風險,且缺乏對請求內容類型的嚴格限制。
dsh-safe-web-fetch 是一個 SSRF-resistant WebFetchProvider 插件。它將 safe-http 註冊爲 DSH 的 ctx.web 服務提供者,在不破壞 DSH 現有工具和 Profile 系統的前提下,提供了一套更嚴格的網絡訪問控制策略。
核心功能¶
該插件通過以下機制增強安全性:
- DNS 校驗:在打開 socket 前檢查每個 DNS 答案,包括 IPv4-mapped IPv6 和特殊用途地址範圍。
- 連接隔離:通過隔離的 Undici dispatcher 進行連接,確保地址檢查與實際請求綁定。
- 重定向控制:重檢查同源重定向,拒絕跨源重定向。
- 速率與大小限制:限制響應字節數、解碼字符數、重定向次數、併發請求數以及總超時時間。
- 內容過濾:僅返回文本類媒體類型(text, HTML, JSON, XML)。
- 隱私保護:不添加 cookies、authorization headers、瀏覽器狀態或請求體。
- URL 規則:僅接受 HTTP/HTTPS URL,且 URL 中不包含嵌入的憑證。
安裝與啓用¶
安裝該插件並激活對應的 Profile 層即可啓用。
- 使用 Next 版本安裝:
dsh plugin --profile safe add dsh-safe-web-fetch@next
安裝後,執行 `dsh --profile safe --dump-config` 查看配置是否生效。
- 生產環境部署時,建議固定已測試的版本:
dsh plugin --profile production add dsh-safe-web-fetch@0.1.0-next.0
- 也可以安裝特定 Git 提交:
dsh plugin --profile safe add github:MostlyHarmlessxyz/dsh-safe-web-fetch#<commit-sha>
配置¶
插件提供了一系列可配置的參數,默認值較爲保守。
| 配置項 | 默認值 | 最大值 |
|---|---|---|
maxUrlLength |
2048 |
16384 |
maxResponseBytes |
5000000 |
100000000 |
maxBodyChars |
100000 |
10000000 |
timeoutMs |
30000 |
Node timer limit |
maxRedirects |
5 |
20 |
maxConcurrentRequests |
16 |
128 |
此外,還可以配置 allowHosts(允許列表)、denyHosts(拒絕列表)和 userAgent。在 DSH 中,配置行會被完整替換,因此修改配置時需包含所有字段。
- id: safe-web-fetch
name: dsh-safe-web-fetch
config:
maxUrlLength: 4096
maxResponseBytes: 10000000
maxBodyChars: 200000
timeoutMs: 30000
maxRedirects: 3
maxConcurrentRequests: 8
allowHosts:
- '*.docs.example.com'
denyHosts: []
userAgent: my-company-fetch/1.0
適用場景與注意¶
該插件適合需要在 DSH 環境中執行受限聯網操作的智能體開發場景。
注意點:
- 內容信任:公共地址不等於可信內容。插件不負責處理提示注入、惡意軟件或 HTML 清理,這些仍需在應用層處理。
- 系統級限制:操作系統級別的第三方解析器無法被該插件完全阻止,這是一個已知的安全邊界。
- 功能邊界:該插件不添加 cookies、authorization headers、瀏覽器狀態或請求體。
- 非網關策略:它不是防火牆、內容掃描器、審批屏幕或代理策略。對於組織級零信任網絡,仍需在網絡邊界部署相應的控制措施。
結語¶
dsh-safe-web-fetch 通過嚴格的 DNS 校驗、連接隔離和內容過濾,爲 DeepSeek Harness 提供了基礎的 SSRF 防護能力。作爲插件生態的一部分,它遵循 DSH “一切皆插件” 的設計理念,開發者可根據 Profile 需求靈活集成。