diff --git a/CHANGELOG.md b/CHANGELOG.md index 604bbbd..bb7b0cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,26 @@ Changelog ist die Upgrade-Anleitung für die Tools. ## [Unreleased] +### Template + +**App-spezifische Cookie-Namen für Session und CSRF** (#22): Browser trennen +Cookies pro Host, nicht pro Port. Tools, die parallel auf demselben Host laufen +(in der Entwicklung mehrere „-bar“-Tools auf `localhost`), überschrieben sich +gegenseitig `sessionid`/`csrftoken` – man war in den anderen Tools abgemeldet +(`403 "Anmeldedaten fehlen."`) und POSTs scheiterten an CSRF. Das Template +setzt jetzt `SESSION_COOKIE_NAME = "_sessionid"` und +`CSRF_COOKIE_NAME = "_csrftoken"`. `basicbar-auth` +(Silent Login, Back-Channel-Logout, `whoami` mit CSRF-Token) und +`basicbar-lti` setzen keine festen Cookie-Namen voraus; das Template-Frontend +liest den CSRF-Token aus `whoami`, nicht aus dem Cookie. + +Migration (bestehende Tools): in `backend/config/settings.py` die zwei Zeilen +ergänzen (Slug des Tools einsetzen). Wer das CSRF-Cookie im Frontend selbst +per Namen liest (z. B. `getCookie("csrftoken")`), stellt auf den neuen Namen +oder auf den Token aus `whoami` um. Beim Deploy werden alle Nutzenden einmal +abgemeldet (per Silent-SSO meist sofort wieder angemeldet). Bereits +übernommen: ausleihbar (virtUOS/ausleihbar#105), kalkulierbar. + ### @basicbar/ui (→ wird `ui/v0.7.2`) **Sicherheits-Fix `stripHtml` / `isEmptyHtml`** (#20): Beide parsten über diff --git a/template/project/backend/config/settings.py.jinja b/template/project/backend/config/settings.py.jinja index 31fed9c..864cd97 100644 --- a/template/project/backend/config/settings.py.jinja +++ b/template/project/backend/config/settings.py.jinja @@ -156,6 +156,12 @@ STATIC_ROOT = BASE_DIR / "staticfiles" MEDIA_URL = "media/" MEDIA_ROOT = BASE_DIR / "media" +# App-specific cookie names: browsers share cookies per host regardless of +# port, so other tools on the same host (e.g. several -bar tools on localhost +# in development) would overwrite "sessionid"/"csrftoken" and log each other out. +SESSION_COOKIE_NAME = "{{ project_slug }}_sessionid" +CSRF_COOKIE_NAME = "{{ project_slug }}_csrftoken" + # Behind a TLS-terminating reverse proxy in production: trust its forwarded # host/scheme so absolute URLs use https, and require secure cookies. if not DEBUG: