# 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.