Files
MyGoNavi/docker.web-server.env.example
Syngnat 3ea04f5530 🐛 fix(webserver): 修复 X-Forwarded-For 可绕过登录失败锁定
- clientIP 改为以不可伪造的直连对端地址为准:该头完全由客户端控制,原实现无条件采信其首值,
  直连攻击者每次请求换一个值即可拿到全新限流桶,彻底绕过 5 次失败锁定
  (口令下限仅 6 位可在线爆破),并使 attempts map 无界增长;且每次尝试都会触发一次
  64 MiB 的 Argon2id 推导,形成认证面的 CPU/内存 DoS
- 新增 GONAVI_WEB_TRUSTED_PROXIES(IP/CIDR 逗号分隔):仅当对端命中该列表时才采信
  X-Forwarded-For,并取最右侧的非可信跳(左侧可被客户端预先伪造);非法值不予采信,
  避免用任意字符串制造新桶
- loginAttemptTracker 增加条目上限与过期清扫:条目原先只在登录成功或同 key 再次 allow 时
  才删除,分布式来源下会单向增长
- docker.web-server.env.example 补充新变量说明(含反代部署下必须配置的提示)
- 补 4 项回归测试,已确认还原为采信 XFF 首值后必定失败
2026-07-26 21:08:49 +08:00

28 lines
1.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 宿主机 GoNavi 活动数据目录。
# 建议至少包含connections.json、daily_secrets.json
# 如需可选驱动代理,一并挂载 drivers/。
# Web 认证状态会写入 web_auth.json未设置环境密码时首次访问 /setup 初始化。
GONAVI_HOST_DATA_ROOT=/absolute/path/to/gonavi-data
# 预构建镜像地址。稳定版通常使用 latest跟随 dev 分支可改成 ghcr.io/syngnat/gonavi-web-server:dev-latest
GONAVI_WEB_IMAGE=ghcr.io/syngnat/gonavi-web-server:latest
# 预构建镜像拉取策略always / missing / never
GONAVI_WEB_PULL_POLICY=missing
# 宿主机暴露端口(映射到容器 34116
GONAVI_WEB_HTTP_PORT=34116
# Web 管理员密码(至少 6 位)。留空时首次访问 /setup 初始化;公网部署请使用更强密码。
# 设置或修改后请执行 docker compose up -d --force-recreate请限制本文件的读取权限。
# 新部署如需启用 2FA请先留空并通过 /setup 初始化,再设置为同一密码并重新创建容器。
GONAVI_WEB_PASSWORD=
# 可信反向代理的 IP / CIDR 列表(逗号分隔)。仅当直连对端命中该列表时,
# 登录限流与失败锁定才会采信 X-Forwarded-For 里的客户端地址。
# 留空(默认)时一律以不可伪造的直连对端地址为准——该头完全由客户端控制,
# 无条件采信会让攻击者逐请求更换该头即绕过 5 次失败锁定。
# 若本服务部署在 Nginx/Traefik/负载均衡之后,请填写这些代理的地址,
# 否则所有客户端会共用同一个限流桶。例GONAVI_WEB_TRUSTED_PROXIES=10.0.0.0/8,172.18.0.1
GONAVI_WEB_TRUSTED_PROXIES=