dsh-netguard
给 dsh 的出网护栏:只允许公网 http(s)、按字节上限与超时抓取、重定向每一跳都复查(防 SSRF / DNS rebinding / 云元数据)。一个服务 + 一个默认关闭的工具。 适合需要严格限制出网请求、防范SSRF等安全风险的场景。
同名パッケージの別リポジトリ
インストール
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:JackZo400/dsh-netguardドキュメント
README 全文を読む ↗配置
- insert:
- id: netguard
name: dsh-netguard
config:
allowedProtocols: ['http:', 'https:'] # 只放这两种
maxBytes: 8388608 # 一次最多下多少字节(8 MiB)
onOverflow: error # error = 报错;truncate = 截断到上限
timeoutMs: 20000 # 整条链共用的超时
allowRedirects: true # 跟不跟重定向(每一跳都会重新体检)
maxRedirects: 3
blockedPorts: [22, 23, 25, 6379, 11211, 27017] # 内网服务常客
allowUrlCredentials: false # 允不允许 URL 里带 user:pass@
allowSingleLabel: false # 允不允许 http://intranet/ 这种
userAgent: dsh-netguard/0.1.0
enableTool: false # 要不要登记 fetch_url 工具
toolMaxChars: 20000 # 工具最多回多少字符正文
大小上限与超时的取舍(这几条是真会踩到的):
- 超限默认报错,而不是静默截断。 因为主要调用场景是"拉图/拉音频",
截断的字节是坏数据:半张 JPEG 解不出图,可流量已经花掉、附件也存下了,
最后报的还是个更难查的错。要"只要前面一段"就显式写
onOverflow: truncate。 Content-Length报得太大就直接不下载,流量一点都不花。- 读流是一边读一边数的,超了立刻断(
reader.cancel()),不是读完再判断 —— 对面挂一个 50GB 的流,读完再判断等于自己把内存吃光。 - 超时是整条链共用一个预算,不是每跳各给一份。否则"跳 10 次、每次卡 19 秒" 能拖出 190 秒。跳转途中花掉的时间也会算进去。