Files
karim 2650913050 security: Härtung der CMS-API + Deployment
App-Level:
- Security-Header (secureHeaders) global; /images/* mit strikter CSP+sandbox
  → bösartiges SVG kann kein JS im Origin ausführen
- Body-Limit 256 KB auf /api/*; Login-Rate-Limit (10/5min) gegen Brute-Force
- Upload: 8-MB-Limit + Format-Verifikation (sharp-Metadaten, SVG/GIF-Signatur)
- Comment-Längenlimit (10k) gegen DB-Bloat
- DB-Fehler nicht mehr roh ausliefern (serverError-Helper)
- Profil-PUT koalesziert Hugo-Builds (kein Build-Sturm)

Infra:
- Container läuft non-root (USER node, uid 1000) + Proxmox-Repo-chown
- Ports binden per Default auf 127.0.0.1 (BIND_ADDR-Escape-Hatch)
- Kong-CORS auf SITE_URL beschränkt statt "*"
- README: Härtungs- + Migrationshinweise

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 22:05:57 +02:00

42 lines
1.7 KiB
Bash

# Kopiere nach .env und ersetze die markierten Werte. Niemals committen.
# ═══ Pflicht: Secrets ═══
# Zufallswerte: openssl rand -hex 32
POSTGRES_PASSWORD=CHANGE-ME-mindestens-32-zufällige-zeichen
JWT_SECRET=CHANGE-ME-mindestens-32-zufällige-zeichen
# Aus JWT_SECRET ableiten: node scripts/generate-keys.mjs
ANON_KEY=CHANGE-ME-aus-jwt-secret-abgeleitet
SERVICE_ROLE_KEY=CHANGE-ME-aus-jwt-secret-abgeleitet
# ═══ Pflicht: URLs ═══
# Nur LAN: SITE_URL=http://192.168.1.50:8080
# Via Proxy: SITE_URL=https://openbureau.ch
SITE_URL=http://localhost:8080
# Öffentliche Supabase-Adresse (Browser/Admin erreichen Kong hierüber).
API_EXTERNAL_URL=http://localhost:8000
# ═══ Rechte: wer ist Admin (sieht/bearbeitet ALLE Beiträge)? ═══
# Komma-getrennte E-Mails. Alle anderen sehen nur Einträge, in denen ihre Mail
# unter `authors` steht.
ADMIN_EMAILS=karim@gabrielevarano.ch
# ═══ Optional: Ports & Binding ═══
# Auf welcher Host-Adresse lauschen die veröffentlichten Ports?
# 127.0.0.1 (Standard) = nur lokal / hinter Reverse-Proxy mit TLS (empfohlen).
# 0.0.0.0 = direkt im LAN erreichbar (ohne Proxy).
# Bei 127.0.0.1 muss SITE_URL/API_EXTERNAL_URL über den Proxy laufen, sonst
# erreicht der Browser :8000/:8080 nicht.
BIND_ADDR=127.0.0.1
APP_PORT=8080 # CMS: Site + /admin + /_preview + /api
KONG_HTTP_PORT=8000 # Supabase-API-Gateway
KONG_HTTPS_PORT=8443
DB_PORT=5432
# ═══ Optional: Git-Backup beim Publish ═══
# true = CMS committet generierte MD nach Gitea (History + Notausgang).
GIT_PUBLISH=false
GIT_REMOTE=origin
GIT_BRANCH=main
GIT_AUTHOR_NAME=OPENBUREAU CMS
GIT_AUTHOR_EMAIL=cms@openbureau.ch