docs(legal)+test: Compliance-Dokumentation & Consent-Unit-Tests (v1.7.4)
Teil 5 des Compliance-Updates: - docs/legal/: data-processing-inventory.md, subprocessors.md, technical-organizational-measures.md, retention-and-deletion.md, incident-response.md, licenses-and-attributions.md — Ist-Zustand aus der Analyse, offene Punkte als Platzhalter - Reine Consent-Regeln nach src/lib/legal-rules.ts ausgelagert (kein Prisma) + Texte nach src/lib/legal-content.ts (7 Pflichtbestätigungen) — für Testbarkeit - Vitest eingerichtet (vitest.config.ts, test-Script); 13 Tests grün: Pflicht-Dokumenttypen, Re-Consent bei neuer Version, normale Benutzer ≠ Org-Vertreter, 7 Org-Bestätigungen, Platzhalter-Erkennung, keine erfundenen Subprozessoren Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
23
docs/legal/data-processing-inventory.md
Normal file
23
docs/legal/data-processing-inventory.md
Normal file
@@ -0,0 +1,23 @@
|
||||
# Dateninventar / Verzeichnis der Bearbeitungstätigkeiten — Lageplan
|
||||
|
||||
Stand: 2026-07-23 · sorgfältiger Entwurf, ersetzt keine juristische Prüfung.
|
||||
Abgeleitet aus dem tatsächlichen Code-Stand. Offene Fristen/Standorte als Platzhalter `[…]`.
|
||||
|
||||
| Datenkategorie | Zweck | Betroffene | Herkunft | Speicherort | Empfänger/Drittanbieter | Auslandbekanntgabe | Aufbewahrung | Löschprozess | Schutzmassnahmen |
|
||||
|---|---|---|---|---|---|---|---|---|---|
|
||||
| Kontodaten (Name, E-Mail, Rolle) | Authentifizierung, Verwaltung | Benutzer | Eingabe bei Registrierung | PostgreSQL | — | `[SERVERSTANDORT]` | bis Kontolöschung | Selfservice/Antrag; Backups bis Zyklusende | Rollen/Mandanten, TLS, Zugriffskontrolle |
|
||||
| Passwort (bcrypt-Hash) | Authentifizierung | Benutzer | Eingabe | PostgreSQL | — | `[SERVERSTANDORT]` | bis Kontolöschung | mit Konto | Einweg-Hash (bcrypt cost 12) |
|
||||
| Einsatz-/Inhaltsdaten (Pläne, Journale, Zeichnungen, Koordinaten) | Kernfunktion | Org-Mitglieder, ggf. Dritte | Eingabe | PostgreSQL | — | `[SERVERSTANDORT]` | bis Löschung durch Org | Projekt-/Orglöschung; Backups | Mandantentrennung, Zugriffskontrolle |
|
||||
| Hochgeladene Dateien (Logos, Planbilder, Symbole) | Darstellung | Org | Upload | MinIO | — | `[SERVERSTANDORT]` | bis Löschung | mit Projekt/Org | Zugriffsschutz, Validierung |
|
||||
| Zustimmungsnachweise (Doc-Typ/Version/Zeitpunkt/Kontext) | Nachweis Einwilligung/Vertrag | Benutzer | System | PostgreSQL | — | `[SERVERSTANDORT]` | Aufbewahrung zu Nachweiszwecken `[FRIST]` | revisionssicher, nicht überschrieben | minimale Daten (keine roh-IP) |
|
||||
| Protokoll-/Sicherheitsdaten | Betrieb, Sicherheit | Benutzer | System | Server-Logs | — | `[SERVERSTANDORT]` | `[FRIST]` | rotierend | Minimierung sensibler Inhalte |
|
||||
| Session-Cookie `auth-token` | Anmeldung | Benutzer | System | Client-Cookie | — | — | 24 h / 14 Tage | Ablauf/Logout | httpOnly, secure (prod), sameSite=lax |
|
||||
| E-Mail-Versand (Verifizierung, Reset, Kontakt, Einladung) | Kommunikation | Benutzer/Empfänger | System/Eingabe | SMTP-Anbieter | E-Mail-Anbieter | `[ABHÄNGIG]` | beim Anbieter | — | TLS, nur bei Bedarf |
|
||||
| Unterstützungsbeiträge (Betrag, Name/Nachricht, payment_intent) | Zahlungsabwicklung | Spender | Eingabe/Stripe | Stripe + `SystemSetting` | Stripe | ja (möglich) | `[FRIST]` | `[PROZESS]` | Zahlungsdaten nur bei Stripe |
|
||||
| Karten-/Geo-Anfragen | Karten/Adresse/Wetter | Benutzer | Client | (extern) | OSM/Esri/swisstopo/Nominatim/Open-Meteo | möglich | keine Speicherung durch App | — | nur Kachel/Koordinaten |
|
||||
| localStorage (Zeichnungen, Sync-Queue, Theme, Onboarding, letztes Projekt, Cookie-Hinweis) | Funktion/Offline | Benutzer | Client | Gerät des Nutzers | — | — | bis lokal gelöscht | Browser | verbleibt lokal |
|
||||
|
||||
## Offene Entscheidungen
|
||||
|
||||
- Konkrete Aufbewahrungsfristen (Logs, Zustimmungen, Zahlungsdaten) → siehe `retention-and-deletion.md`.
|
||||
- Serverstandorte bestätigen.
|
||||
44
docs/legal/incident-response.md
Normal file
44
docs/legal/incident-response.md
Normal file
@@ -0,0 +1,44 @@
|
||||
# Incident-Response — Lageplan
|
||||
|
||||
Stand: 2026-07-23 · sorgfältiger Entwurf. **Manueller Entscheidungsprozess** — es erfolgt KEINE
|
||||
automatische Meldung an Behörden. Meldepflichten werden im Einzelfall geprüft.
|
||||
|
||||
## Kontakte (auszufüllen)
|
||||
- Verantwortlich (Betreiber): `[NAME]` · `[KONTAKT]`
|
||||
- Datenschutzkontakt: siehe `src/config/legal.ts` (`privacyContactEmail`)
|
||||
- Technischer Notfallkontakt: `[NAME/TELEFON]`
|
||||
- Zuständige Aufsichtsbehörde (CH): EDÖB — `[LINK/KONTAKT]`
|
||||
|
||||
## Ablauf
|
||||
|
||||
1. **Erkennung** — Quelle (Monitoring, Meldung, Nutzerhinweis), Zeitpunkt und Symptome festhalten.
|
||||
2. **Interne Eskalation** — Verantwortliche informieren; Vorfall im Vorfallprotokoll eröffnen.
|
||||
3. **Eindämmung** — betroffene Systeme/Zugänge isolieren, ggf. Dienste temporär sperren.
|
||||
4. **Beweissicherung** — Logs/Artefakte sichern, bevor Änderungen erfolgen.
|
||||
5. **Bewertung betroffener Daten** — welche Datenkategorien/Personen sind betroffen?
|
||||
6. **Risikobewertung** — Eintritts-/Schadenswahrscheinlichkeit für Betroffene.
|
||||
7. **Information betroffener Organisationen** — ohne unangemessene Verzögerung, sachlich.
|
||||
8. **Prüfung Behördenmeldung** — Meldepflicht (z.B. EDÖB) im Einzelfall prüfen und **manuell** entscheiden/dokumentieren.
|
||||
9. **Passwort-/Schlüsselrotation** — Secrets, Tokens, ggf. Nutzer-Passwörter rotieren.
|
||||
10. **Wiederherstellung** — aus sauberem Stand/Backup; Integrität prüfen.
|
||||
11. **Nachbearbeitung** — Ursachenanalyse, Massnahmen, Lessons Learned.
|
||||
|
||||
## Vorfallprotokoll (Vorlage)
|
||||
| Feld | Inhalt |
|
||||
|---|---|
|
||||
| Vorfall-ID / Datum | |
|
||||
| Entdeckt durch / wann | |
|
||||
| Beschreibung | |
|
||||
| Betroffene Daten/Personen | |
|
||||
| Sofortmassnahmen | |
|
||||
| Risikobewertung | |
|
||||
| Information an Organisationen (wann/wie) | |
|
||||
| Behördenmeldung (ja/nein, Begründung) | |
|
||||
| Rotation durchgeführt | |
|
||||
| Wiederherstellung | |
|
||||
| Abschluss / Massnahmen | |
|
||||
|
||||
## Vom Betreiber zu treffende Entscheidungen
|
||||
- Verbindliche Kontaktliste und Erreichbarkeit.
|
||||
- Melde-Schwellen und interne Fristen.
|
||||
- Aufbewahrung des Vorfallprotokolls.
|
||||
45
docs/legal/licenses-and-attributions.md
Normal file
45
docs/legal/licenses-and-attributions.md
Normal file
@@ -0,0 +1,45 @@
|
||||
# Lizenzen und Attributionen — Lageplan
|
||||
|
||||
Stand: 2026-07-23 · sorgfältiger Entwurf. Eine Quellenangabe ersetzt NICHT automatisch eine
|
||||
erforderliche Nutzungslizenz. Offene Freigabefragen sind markiert.
|
||||
|
||||
## Karten & Geodaten
|
||||
| Quelle | Nutzung | Lizenz/Bedingungen | Attribution | Offene Frage |
|
||||
|---|---|---|---|---|
|
||||
| OpenStreetMap | Basiskarte, Nominatim | ODbL (Daten) | "© OpenStreetMap-Mitwirkende" (vorhanden im Impressum/Karte) | Tile-Usage-Policy einhalten (Fair Use) |
|
||||
| Esri World Imagery | Satellitenlayer | Esri-Nutzungsbedingungen | "Esri World Imagery" | ⚠️ kommerzielle/Nutzungsbedingungen prüfen |
|
||||
| swisstopo (geo.admin.ch) | Landeskarte | swisstopo-Bedingungen | "© swisstopo" empfohlen | ⚠️ Attribution/Bedingungen bestätigen |
|
||||
| Open-Meteo | Wind/Höhe | Open-Meteo Terms (frei, Attribution empfohlen) | "Open-Meteo" | Attribution ergänzen? |
|
||||
| Open-Elevation | Höhe (Fallback) | offen/community | — | ⚠️ Bedingungen prüfen |
|
||||
|
||||
## Symbole / Icons
|
||||
| Quelle | Nutzung | Lizenz | Attribution | Offene Frage |
|
||||
|---|---|---|---|---|
|
||||
| FKS/BABS taktische Zeichen | Einsatzsymbole | `[NUTZUNGSRECHT ZU KLÄREN]` | "Bildquelle Feuerwehr Koordination Schweiz FKS" (vorhanden) | ⚠️ **Nutzungsrecht/Freigabe FKS bestätigen** |
|
||||
| lucide-react | UI-Icons | ISC | — (im Code) | ok |
|
||||
|
||||
## Schriftarten
|
||||
| Quelle | Lizenz | Hinweis |
|
||||
|---|---|---|
|
||||
| Barlow (Google Fonts, via next/font) | SIL Open Font License 1.1 | build-time self-hosted, kein Laufzeit-Request zu Google |
|
||||
|
||||
## Wesentliche Bibliotheken (Auszug)
|
||||
| Paket | Lizenz |
|
||||
|---|---|
|
||||
| next / react | MIT |
|
||||
| maplibre-gl | BSD-3-Clause |
|
||||
| jspdf | MIT (+ Teile Apache-2.0) |
|
||||
| qrcode | MIT |
|
||||
| stripe (SDK) | MIT |
|
||||
| bcryptjs, jose, zod, socket.io | MIT |
|
||||
| @prisma/client, prisma | Apache-2.0 |
|
||||
|
||||
## Bereits umgesetzte sichtbare Attributionen
|
||||
- Karten-Attribution "© OpenStreetMap contributors | MapLibre" auf der Karte.
|
||||
- "Taktische Symbole: Bildquelle Feuerwehr Koordination Schweiz FKS" im Footer.
|
||||
- Kartendaten-Hinweis im Impressum (OpenStreetMap, Nominatim).
|
||||
|
||||
## Offene Freigabefragen (Betreiber)
|
||||
1. **FKS/BABS-Symbole**: Nutzungsrecht/Freigabe für die konkrete Verwendung schriftlich bestätigen.
|
||||
2. Esri/swisstopo-Nutzungsbedingungen für den vorgesehenen (auch nicht-kommerziellen) Einsatz prüfen.
|
||||
3. Vollständige Lizenzliste (z.B. `license-checker`) generieren und Drittlizenzen bündeln, falls verteilt.
|
||||
37
docs/legal/retention-and-deletion.md
Normal file
37
docs/legal/retention-and-deletion.md
Normal file
@@ -0,0 +1,37 @@
|
||||
# Aufbewahrungs- und Löschkonzept — Lageplan
|
||||
|
||||
Stand: 2026-07-23 · sorgfältiger Entwurf. **Keine Fristen erfunden** — offene Fristen als `[FRIST — zu
|
||||
entscheiden]`. Der Betreiber muss die markierten Entscheidungen treffen.
|
||||
|
||||
| Datenkategorie | Aufbewahrung | Löschung / Prozess |
|
||||
|---|---|---|
|
||||
| Aktive Benutzerkonten | solange Konto besteht | Selfservice/Antrag; kaskadierende Löschung zugehöriger Daten |
|
||||
| Deaktivierte Konten (`isActive=false`) | `[FRIST]` | `[PROZESS — automatische Löschung nach X?]` |
|
||||
| Organisationen (Tenant) | solange aktiv | Löschung durch Org-Admin (Einstellungen) nach Berechtigungsprüfung |
|
||||
| Pläne / Projekte | bis Löschung durch Org | mit Projekt-/Orglöschung (Cascade) |
|
||||
| Dateiuploads (MinIO) | bis Löschung des Bezugsobjekts | mit Projekt/Org/Icon |
|
||||
| Audit-/Aktionslogs (falls geführt) | `[FRIST]` | `[PROZESS]` |
|
||||
| Sicherheits-/Server-Logs | `[FRIST]` | Rotation `[KONFIG]` |
|
||||
| Einladungen | `[FRIST]` | nach Annahme/Ablauf |
|
||||
| Passwort-Reset-Tokens | Ablauf (`resetTokenExpiry`) | mit Verwendung/Ablauf |
|
||||
| E-Mail-Verifizierungs-Tokens | bis Verifizierung | mit Verifizierung |
|
||||
| E-Mails (beim SMTP-Anbieter) | beim Anbieter | `[ABHÄNGIG]` |
|
||||
| Zahlungsinformationen (Stripe + `SystemSetting/donations`) | `[FRIST]` (ggf. gesetzliche Aufbewahrung) | `[PROZESS]`; Zahlungsdaten liegen bei Stripe |
|
||||
| Supportanfragen (Kontaktformular) | `[FRIST]` | `[PROZESS]` |
|
||||
| Backups | `[BACKUP-AUFBEWAHRUNGSFRIST]` | mit Ablauf des Backup-Zyklus |
|
||||
| Zustimmungshistorie (LegalAcceptance) | zu Nachweiszwecken `[FRIST]` | revisionssicher, i.d.R. nicht gelöscht solange Konto besteht |
|
||||
|
||||
## Grundsätze
|
||||
- Produktivdaten werden nach Abschluss des Löschvorgangs entfernt.
|
||||
- Daten in Sicherungskopien können bis zum Ablauf des regulären Backup-Zyklus fortbestehen.
|
||||
- Organisationsrelevante Daten werden nicht ohne Berechtigungsprüfung sofort gelöscht.
|
||||
- Betroffenenrechte (Auskunft, Berichtigung, Löschung, Export) über `/konto/datenschutz` bzw.
|
||||
Datenschutzkontakt; Eingang wird bestätigt.
|
||||
|
||||
## Vom Betreiber zu treffende Entscheidungen
|
||||
1. Aufbewahrungsfrist deaktivierter Konten und automatischer Löschlauf?
|
||||
2. Log-Aufbewahrung (Server-/Sicherheitslogs) und Rotation?
|
||||
3. Aufbewahrung Zahlungs-/Spendendaten (gesetzliche Pflichten?).
|
||||
4. Backup-Aufbewahrungsfrist (`LEGAL_BACKUP_RETENTION`).
|
||||
5. Aufbewahrung Zustimmungsnachweise nach Kontolöschung.
|
||||
6. Support-/Kontaktanfragen-Frist.
|
||||
33
docs/legal/subprocessors.md
Normal file
33
docs/legal/subprocessors.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# Unterauftragnehmer / Subprozessoren — Lageplan
|
||||
|
||||
Stand: 2026-07-23 · sorgfältiger Entwurf, ersetzt keine juristische Prüfung.
|
||||
|
||||
Nur tatsächlich im Code verwendete bzw. optional konfigurierbare Dienste. Nicht verwendete Dienste
|
||||
sind NICHT aufgeführt. Regionen/Verträge, die nicht sicher bekannt sind, tragen Platzhalter `[…]`.
|
||||
|
||||
| Anbieter | Zweck | Verarbeitete Daten | Sitz / Region | Datenschutzhinweis | Auslandbearbeitung | Vertragsstatus |
|
||||
|---|---|---|---|---|---|---|
|
||||
| OpenStreetMap Foundation (Tiles) | Basiskarte | Kachel-Koordinaten, IP (Client) | `[REGION — UK/EU]` | osmfoundation.org/wiki/Privacy_Policy | möglich | `[ZU PRÜFEN]` |
|
||||
| Esri (ArcGIS World Imagery) | Satellitenbilder | Kachel-Koordinaten, IP (Client) | `[REGION — USA/global]` | esri.com/legal | wahrscheinlich | `[ZU PRÜFEN]` |
|
||||
| swisstopo (geo.admin.ch) | Schweizer Landeskarte | Kachel-Koordinaten, IP (Client) | Schweiz | geo.admin.ch | nein | `[ZU PRÜFEN]` |
|
||||
| Nominatim (OSM) | Adress-/Reverse-Geocoding | Suchbegriff/GPS, IP (Client) | `[REGION — OSMF]` | osmfoundation.org | möglich | `[ZU PRÜFEN]` |
|
||||
| Open-Meteo | Wind-/Höhendaten | Koordinaten, IP (Client) | `[REGION — EU/DE]` | open-meteo.com/en/terms | möglich | `[ZU PRÜFEN]` |
|
||||
| Open-Elevation | Höhendaten (Fallback) | Koordinaten, IP (Client) | `[REGION]` | open-elevation.com | möglich | `[ZU PRÜFEN]` |
|
||||
| Stripe | Zahlungsabwicklung (freiwillige Beiträge) | Betrag, freiwilliger Name/Nachricht, Zahlungsdaten (direkt bei Stripe) | `[REGION — USA/EU]` | stripe.com/privacy | ja (USA möglich) | `[DPA PRÜFEN]` · nur wenn konfiguriert |
|
||||
| SMTP-/E-Mail-Anbieter (konfigurierbar) | System-E-Mails | Empfängeradresse, Mailinhalt | `[ABHÄNGIG VOM ANBIETER]` | `[ANBIETER]` | abhängig | `[ZU PRÜFEN]` · nur wenn konfiguriert |
|
||||
| MinIO (Objektspeicher, selbst gehostet) | Datei-/Bild-Uploads | Pläne, Logos, Symbole | `[SERVERSTANDORT]` | — (Eigenbetrieb) | `[ZU BESTÄTIGEN]` | Eigenbetrieb |
|
||||
| PostgreSQL (Datenbank, selbst gehostet) | Primäre Datenhaltung | Konto-, Org-, Plan-, Journaldaten | `[SERVERSTANDORT]` | — (Eigenbetrieb) | `[ZU BESTÄTIGEN]` | Eigenbetrieb |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- **Client-seitige Dienste** (Tiles, Nominatim, Open-Meteo/Elevation): werden direkt aus dem Browser
|
||||
des Nutzers aufgerufen; dabei kann die IP-Adresse an den Anbieter gelangen.
|
||||
- **Stripe** und **SMTP** sind nur aktiv, wenn in den Systemeinstellungen (DB `SystemSetting`) konfiguriert.
|
||||
- **MapTiler / Mapbox / Google Maps**: NICHT genutzt (MapTiler nur in der CSP-Allowlist vorbereitet).
|
||||
- **Analytics / Error-Tracking (Sentry, GA, Plausible, PostHog)**: NICHT vorhanden.
|
||||
|
||||
## Offene Entscheidungen des Betreibers
|
||||
|
||||
- Serverstandort für PostgreSQL, MinIO, Backups und Logs abschliessend bestätigen.
|
||||
- DPA/AVV mit Stripe und dem gewählten E-Mail-Anbieter abschliessen und Status hier eintragen.
|
||||
- Verarbeitungsregionen der Kartendienste konkretisieren.
|
||||
59
docs/legal/technical-organizational-measures.md
Normal file
59
docs/legal/technical-organizational-measures.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# 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 für System-/Org-Admins: ❌ nicht vorhanden → **Empfehlung offen**.
|
||||
- ✅ 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.
|
||||
Reference in New Issue
Block a user