mirror of
https://github.com/Sagit-chu/flvx.git
synced 2026-09-28 07:36:38 +08:00
58d2e89147
* fix: reduce reconnect redeploy and metrics load Throttle node-online redeploy retries and lower the agent metric cadence so brief reconnect churn no longer fans out into repeated runtime syncs and backend connection pressure. * docs: add follow-up implementation design notes Document the planned flow upload batching work and the local remote-address toggle so the next changesets can implement them against an agreed design.
4.1 KiB
4.1 KiB
允许转发到本地地址开关设计
日期: 2026-04-26 状态: 待审核 作者: AI Assistant
概述
新增一个全局设置开关,控制规则目标地址是否允许指向本地/内网地址。默认关闭,保持当前安全策略不变;开启后,规则创建和编辑时允许将目标地址设置为 127.0.0.1、10.x.x.x、172.16-31.x.x、192.168.x.x 等本地或私网地址。
背景
当前后端在规则创建和编辑时会调用 IsSafeRemoteAddr(),统一禁止目标地址指向本地/内网地址,用来降低 SSRF / 开放代理风险。这一行为是全局硬编码的,无法按部署场景调整。
有些用户需要把规则转发到本机或内网服务,因此需要一个显式、全局的开关来放宽这条限制。
目标
- 在设置页提供一个全局开关控制该行为。
- 默认关闭,不改变现有安全默认值。
- 开启后,规则创建和编辑允许本地/内网目标地址。
- 不影响其他安全校验和其他业务流程。
影响范围
后端
go-backend/internal/http/handler/security_utils.gogo-backend/internal/http/handler/mutations.gogo-backend/internal/http/handler/handler.go
前端
vite-frontend/src/pages/config.tsx
测试
go-backend/tests/contract/forward_contract_test.go或新增独立 contract test
详细设计
1. 配置存储
使用现有 vite_config 表新增一个配置项:
| name | value | 说明 |
|---|---|---|
allow_local_remote_addr |
"1" / "0" |
是否允许规则目标地址指向本地/内网地址 |
约定:
- 未配置时按
"0"处理 "1"表示允许- 其他值一律按关闭处理
2. 后端行为
新增一个轻量辅助函数,用于读取该配置开关:
func (h *Handler) allowLocalRemoteAddr() bool {
if h == nil || h.repo == nil {
return false
}
cfg, err := h.repo.GetConfigByName("allow_local_remote_addr")
if err != nil || cfg == nil {
return false
}
return strings.TrimSpace(cfg.Value) == "1"
}
在以下路径中应用:
forwardCreateforwardUpdate
行为改为:
- 当开关关闭时,继续执行
IsSafeRemoteAddr(remoteAddr) - 当开关开启时,跳过这条“本地/内网地址禁止”校验
这样可以把改动范围限定在规则创建/编辑,不改变其他依赖 IsSafeRemoteAddr() 的场景。
3. 前端设置页
在 vite-frontend/src/pages/config.tsx 增加一个全局开关配置项。
建议文案:
- 标签:
允许转发到本地地址 - 描述:
开启后,规则目标地址可指向 127.0.0.1、10.x.x.x、172.16-31.x.x、192.168.x.x 等本地或内网地址。默认关闭以降低开放代理风险。
控件类型:
- 使用现有设置页的布尔开关模式
默认显示策略:
- 不依赖其他配置项
- 直接显示在设置页的网络/安全相关区域;若现有页面没有单独分区,则先按现有配置项组织方式加入即可
4. 错误与兼容性
关闭开关时:
- 保持现有错误行为,继续阻止本地/内网地址
开启开关时:
- 仅放开“本地/内网地址禁止”这条限制
- 仍保留地址格式解析失败等其他错误
5. 测试
需要补两类后端契约测试:
- 开关关闭时拒绝本地/内网地址
- 创建规则时使用本地/内网地址
- 断言接口返回非 0 code
- 开关开启时允许本地/内网地址
- 先写入
vite_config(name=allow_local_remote_addr, value=1) - 创建或更新规则时使用相同地址
- 断言接口成功
建议至少覆盖:
- create 路径
- update 路径
- 多目标地址输入(逗号或换行分隔)中包含本地地址时的行为
风险与约束
- 该开关会降低默认安全防护,应明确标注风险。
- 这是全局开关,不做用户级或规则级细分控制。
- 该开关只影响规则目标地址校验,不影响其他独立的安全策略。
推荐实施顺序
- 先补失败的后端契约测试
- 实现后端配置读取与创建/更新分支控制
- 在设置页增加开关
- 跑后端测试与前端构建验证