Tier 1 of "secure behind a reverse proxy". STRICTLY opt-in so direct/LAN installs are byte-for-byte unchanged. - core/security/reverse_proxy.py: apply_reverse_proxy_mode(app, config_get) — a no-op unless security.trust_reverse_proxy=true. When OFF (default), the app is untouched: no ProxyFix, X-Forwarded-* stays UNtrusted (a direct client can't spoof its IP/scheme), session cookie keeps Flask defaults. When ON (operator is behind nginx/Caddy/Traefik with TLS): trust one proxy hop's X-Forwarded-*, and mark the session cookie Secure + SameSite=Lax. Any config error → safe no-op, never breaks startup. - Wired once at app init. - Support/REVERSE-PROXY.md: nginx (with the Socket.IO Upgrade headers people always miss) / Caddy / Traefik configs, the setting, and the "put auth in front (Authelia/Authentik/oauth2-proxy)" recommendation + the off-for-plain-HTTP note. Tests: off (and missing-key, and a config exception) is a strict no-op — not ProxyFix-wrapped, cookie defaults intact; on wraps ProxyFix + secures the cookie; and the real web_server app is NOT in proxy mode by default. 5 tests pass. |
||
|---|---|---|
| .. | ||
| API.md | ||
| AUTOMATIONS.md | ||
| DOCKER-OAUTH-FIX.md | ||
| DOCKER-TRANSFER-GUIDE.md | ||
| DOCKER.md | ||
| DOCKER_PERMISSIONS.md | ||
| IMPORT-STAGING-GUIDE.md | ||
| METADATA-FALLBACK-IMPLEMENTATION.md | ||
| README-Docker.md | ||
| REVERSE-PROXY.md | ||
| UNRAID.md | ||