DEBUG was on in production, so an error rendered a full traceback and the DEBUG-only media route served /media/ixg-documents/... publicly, bypassing the document permission checks. Set DJANGO_DEBUG=False in the env files (untracked) and add friendly 500/404/403 templates. With DEBUG off Django no longer serves /static/, so nginx does: the static root moves to /var/www/ixg-platform-static (mounted into the app container) because /root is not traversable by www-data. HSTS (max-age 1y, includeSubDomains) is added to every HTTPS host, and a pragmatic CSP to the app/ops/portal locations. 'unsafe-inline' is required by the inline scripts/styles; self-hosting the CDN assets and nonces is a follow-up. |
||
|---|---|---|
| .. | ||
| guides | ||
| ops | ||
| portal | ||
| 403.html | ||
| 404.html | ||
| 500.html | ||