mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-08-07 07:03:34 +08:00
- 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 首值后必定失败
28 lines
1.6 KiB
Plaintext
28 lines
1.6 KiB
Plaintext
# 宿主机 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=
|