前言¶
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 需求灵活集成。