Files
Lageplan/docs/legal/technical-organizational-measures.md
Pepe Ziberi f58f1b31bf
Some checks failed
Build and Push Docker Image / build-and-push (push) Has been cancelled
feat(auth): WebAuthn (YubiKey/Passkeys) + Admin-2FA-Reset-Button (v1.8.1)
- WebAuthn/FIDO2 via @simplewebauthn v13: Registrierung (Session) + Login-Faktor (öffentlich),
  zustandslose Challenge-Token (JWT), Zähler/Klon-Schutz, Credentials in webauthn_credentials
  - Routen: /api/auth/mfa/webauthn/register/{options,verify}, DELETE /webauthn/[id],
    /api/auth/mfa-login/webauthn/{options,verify}
- Settings: Sicherheitsschlüssel/Passkey hinzufügen + Liste + entfernen
- Login: "Mit Sicherheitsschlüssel/Passkey anmelden" (neben TOTP)
- Admin: 2FA-Zurücksetzen-Button in der Benutzerliste (nutzt bestehende mfa-reset-API)
- Sicherheitsseite + TOM-Doku: 2FA als vorhanden dokumentiert

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 18:15:03 +02:00

3.4 KiB

Technische und organisatorische Massnahmen (TOM) — Lageplan

Stand: 2026-07-23 · sorgfältiger Entwurf. Ist-Zustand aus dem Code; offene Punkte klar markiert. Legende: vorhanden · ⚠️ teilweise / zu bestätigen · offen / nicht umgesetzt.

Zugriff & Berechtigungen

  • Mandantentrennung je Organisation (Tenant), getProjectWithTenantCheck.
  • Rollenkonzept: SERVER_ADMIN, TENANT_ADMIN, OPERATOR, VIEWER.
  • MFA/Zwei-Faktor verfügbar: TOTP (Authenticator-App) + WebAuthn (YubiKey/Passkeys), freiwillig pro Benutzer; Admin kann MFA zurücksetzen. Backup-Codes als Fallback. (SMS bewusst nicht umgesetzt.)
  • Admin-APIs serverseitig mit isAdmin/isServerAdmin geschützt.

Authentifizierung & Sessions

  • Passwort-Hashing: bcrypt (cost 12), nie Klartext.
  • JWT-Session (jose, HS256), Cookie auth-token httpOnly, secure (prod), sameSite=lax, 24 h/14 Tage.
  • Passwort-Reset mit kryptographischem Token (32 Bytes), Ablauf.
  • E-Mail-Verifizierung.

Transport & Web-Härtung

  • HTTPS/TLS; HSTS (max-age 2 Jahre, preload).
  • Sicherheits-Header: CSP (mit frame-ancestors 'self'), X-Content-Type-Options nosniff, Referrer-Policy, Permissions-Policy, COOP, X-XSS-Protection.
  • ⚠️ CSP enthält unsafe-inline/unsafe-eval (für MapLibre gelockert) → langfristig verschärfen.
  • Private Routen (/app,/admin,/settings,/konto): X-Robots-Tag: noindex + Cache-Control: no-store (Middleware).
  • ⚠️ Socket.io-Server (server-custom.js): CORS origin:'*'einschränken empfohlen.

Eingaben & Uploads

  • Rate-Limiting: Login, Registrierung, Passwort-Reset, Verifizierung, Kontakt, Konto-Löschung, Share-PIN.
  • ⚠️ Rate-Limiter ist In-Memory (pro Instanz) → bei Mehr-Instanz-Betrieb geteilten Store nutzen.
  • ⚠️ Upload-Validierung (MIME/Grösse): vorhanden für Icons/Logos/Planbilder → Umfang bestätigen.
  • Zugriffsschutz auf Dateien (serve-Routen mit Tenant-Check).

Speicherung & Verschlüsselung

  • Übertragung verschlüsselt (TLS).
  • ⚠️ Verschlüsselung ruhender Daten (DB/MinIO/Backups): [ZU BESTÄTIGEN].
  • ⚠️ Secrets-Verwaltung: ENV (NEXTAUTH_SECRET, MinIO) + DB (SystemSetting: SMTP/Stripe) → Absicherung der DB-Secrets bestätigen.

Backup & Wiederherstellung

  • ⚠️ Backups: [VORHANDEN? FREQUENZ? AUFBEWAHRUNG?] (siehe docs/backup-und-seeding.md).
  • Restore-Tests: [DOKUMENTIEREN].

Logging & Monitoring

  • Server-Logs (console). ⚠️ Vermeidung sensibler Daten in Logs → Review empfohlen.
  • Zentrales Monitoring/Alerting: [OFFEN].

Betrieb & Prozesse

  • Idempotente Migrationen (prisma/migrate.js) beim Container-Start.
  • ⚠️ Dependency-/Patch-Management: [PROZESS DOKUMENTIEREN].
  • ⚠️ Trennung Entwicklung/Test/Produktion: [BESTÄTIGEN]; Umgang mit Testdaten [BESTÄTIGEN].
  • Löschkonzept/Datenexport: siehe retention-and-deletion.md; Betroffenenrechte via /konto/datenschutz.
  • Berechtigungsentzug: Benutzer sperren (isActive), aus Organisation entfernen.

Direkt umgesetzte risikoarme Verbesserungen (dieses Update)

  • Private Routen auf noindex/no-store gesetzt.
  • Rechtliche Prüf-Hinweise in Exporten und Berechnungen.
  • Revisionssichere Zustimmungsprotokollierung ohne roh-IP.

Empfohlene, noch offene Massnahmen

  • MFA für Admins; CSP verschärfen; Socket.io-CORS einschränken; geteilter Rate-Limit-Store; Verschlüsselung ruhender Daten + Backups bestätigen; Restore-Tests; Monitoring.