diff --git a/AUTHENTICATION.md b/AUTHENTICATION.md index 0100911..7610970 100644 --- a/AUTHENTICATION.md +++ b/AUTHENTICATION.md @@ -24,7 +24,7 @@ Die API verwendet **zwei verschiedene Authentifizierungs-Mechanismen** für unte ```env ADMIN_SESSION_SECRET=$(openssl rand -hex 32) ``` - > ℹ️ Standardmäßig setzt der Server in Production HTTPS-Only Cookies (`Secure`). Falls deine Installation **ohne HTTPS** hinter einem internen Netzwerk läuft, kannst du das Verhalten über `ADMIN_SESSION_COOKIE_SECURE=false` explizit deaktivieren. Verwende dies nur in vertrauenswürdigen Umgebungen! + > ℹ️ Standardmäßig setzt der Server in Production HTTPS-Only Cookies (`Secure`). Falls deine Installation **ohne HTTPS** hinter einem internen Netzwerk läuft, kannst du das Verhalten über `ADMIN_SESSION_COOKIE_SECURE=false` explizit deaktivieren. Verwende dies nur in vertrauenswürdigen Umgebungen und setze den Wert vorzugsweise per lokaler Compose-Override-Datei oder geheimen ENV-Variablen, damit das Repo weiterhin den sicheren Default `true` behält. 2. **Backend starten** – Migration legt Tabelle `admin_users` an. 3. **Setup-Status prüfen**: ```bash diff --git a/README.dev.md b/README.dev.md index 7c7c15d..08db770 100644 --- a/README.dev.md +++ b/README.dev.md @@ -432,14 +432,15 @@ git push origin feature/my-feature ### Git Hook (optional Absicherung) -Für Deployments ohne HTTPS muss `docker/prod/docker-compose.yml` die Zeile `- ADMIN_SESSION_COOKIE_SECURE=false` enthalten. -Ein vorgefertigtes Pre-Commit-Hook stellt sicher, dass diese Zeile vorhanden ist bzw. automatisch korrigiert wird: +Standard-Deployments sollten `ADMIN_SESSION_COOKIE_SECURE=true` behalten, damit das Session-Cookie nur über HTTPS übertragen wird. +Das bereitgestellte Pre-Commit-Hook stellt sicher, dass der Wert in `docker/prod/docker-compose.yml` automatisch auf `true` zurückgesetzt wird, falls er versehentlich verändert wurde (z. B. nach einem Test auf HTTP-only Hardware): ```bash ln -s ../../scripts/git-hooks/pre-commit .git/hooks/pre-commit ``` -Nach der Installation aktualisiert der Hook die Datei bei Bedarf und staged sie direkt. Entfernen kannst du ihn jederzeit über `rm .git/hooks/pre-commit`. +Nach der Installation aktualisiert der Hook die Datei bei Bedarf und staged sie direkt. +Für lokale HTTP-Lab-Deployments nutze eine separate (gitignorierte) `docker-compose.override.yml`, um `ADMIN_SESSION_COOKIE_SECURE=false` nur zur Laufzeit zu setzen. Entfernen kannst du den Hook jederzeit über `rm .git/hooks/pre-commit`. ## Nützliche Befehle diff --git a/docker/prod/docker-compose.yml b/docker/prod/docker-compose.yml index 7170a54..34f4c8d 100644 --- a/docker/prod/docker-compose.yml +++ b/docker/prod/docker-compose.yml @@ -38,8 +38,16 @@ services: - NODE_ENV=production - ADMIN_SESSION_SECRET=MvFhivVIPIXvSGvWGfGOiQCkUJrmUsjWQTNGUgnSmtpsGHQlKruTBEBZgbVvOHHr - ADMIN_SESSION_DIR=/usr/src/app/src/data/sessions - - ADMIN_SESSION_COOKIE_SECURE=false + # ⚠️ Für HTTP-only Labs per Override auf "false" setzen (nicht im Repo committen) + - ADMIN_SESSION_COOKIE_SECURE=true + sqliteweb: + image: tomdesinto/sqliteweb + ports: + - 8080:8080 + volumes: + - image_data:/usr/src/app/src/data/:ro + command: /usr/src/app/src/data/db/image_uploader.db networks: npm-nw: diff --git a/scripts/git-hooks/pre-commit b/scripts/git-hooks/pre-commit index 8023dc7..5577d76 100755 --- a/scripts/git-hooks/pre-commit +++ b/scripts/git-hooks/pre-commit @@ -4,7 +4,7 @@ set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" TARGET_FILE="$ROOT_DIR/docker/prod/docker-compose.yml" ANCHOR_LINE=" - ADMIN_SESSION_DIR=/usr/src/app/src/data/sessions" -EXPECTED_LINE=" - ADMIN_SESSION_COOKIE_SECURE=false" +EXPECTED_LINE=" - ADMIN_SESSION_COOKIE_SECURE=true" if [[ ! -f "$TARGET_FILE" ]]; then exit 0 @@ -28,7 +28,7 @@ changed = False if 'ADMIN_SESSION_COOKIE_SECURE' in text: pattern = re.compile(r'(\-\s*ADMIN_SESSION_COOKIE_SECURE\s*=\s*)([^\n\r]+)') - new_text, count = pattern.subn(r'\1false', text, count=1) + new_text, count = pattern.subn(r'\1true', text, count=1) if count: changed = new_text != text else: @@ -39,7 +39,7 @@ else: changed = True if expected not in new_text: - print('ERROR: Failed to ensure ADMIN_SESSION_COOKIE_SECURE=false in docker-compose.yml', file=sys.stderr) + print('ERROR: Failed to ensure ADMIN_SESSION_COOKIE_SECURE=true in docker-compose.yml', file=sys.stderr) sys.exit(3) if changed: