Security Policies

24 Richtlinien in 9 Kategorien — DSGVO, OWASP, BSI

Zentrale Authentifizierung (Azure AD)

Automatisch

Jede App muss Azure AD als einzigen Identity Provider nutzen. Keine lokalen Passwörter, keine eigene Benutzerverwaltung.

Anforderung: lib/auth.ts muss vorhanden sein und den AzureADProvider konfigurieren. Benutzer melden sich mit ihrem Microsoft-Konto an.
AuthentifizierungBSI APP.4.4.A1

Session-Sicherheit

Automatisch

Login-Sessions müssen kryptografisch gesichert sein und nach spätestens 8 Stunden ablaufen.

Anforderung: NEXTAUTH_SECRET muss in .env.example dokumentiert sein. Cookies: httpOnly (kein JavaScript-Zugriff), Secure-Flag (nur HTTPS), SameSite.
AuthentifizierungOWASP A07:2021

Route-Schutz (Middleware)

Automatisch

Jede Seite und jede API-Route muss durch die NextAuth-Middleware geschützt sein. Ohne Login kein Zugriff — außer /login und /api/health.

Anforderung: middleware.ts muss NextAuth-Middleware importieren (next-auth/middleware oder getServerSession). Schützt alle Routes automatisch.
AuthentifizierungOWASP A01:2021

EU-Datenhaltung

Manuell

Alle personenbezogenen Daten müssen in der EU gespeichert und verarbeitet werden. Kein Transfer in die USA oder andere Drittländer.

Anforderung: Datenbank: IONOS (Frankfurt). AI: Langdock (EU-hosted). Keine US-Cloud-Dienste (OpenAI direkt, AWS US) für personenbezogene Daten.
DatenschutzDSGVO Art. 44-49

DSGVO-konformes Tracking

Automatisch

Das Tracking-System darf keine personenbezogenen Daten (Namen, E-Mails, Adressen) im Klartext speichern.

Anforderung: trackEntityChange() loggt nur Feldnamen ("email wurde geändert"), nie Werte ("max@example.com → new@example.com"). TRACKABLE_FIELDS Whitelist steuert, welche Felder überhaupt geloggt werden.
DatenschutzDSGVO Art. 5

AI-Datenschutz

Automatisch

KI-Aufrufe dürfen keine personenbezogenen Daten an Provider außerhalb der EU senden.

Anforderung: Alle AI-Calls müssen über lib/ai.ts und Langdock (EU-gehostet) laufen. Kein direkter Zugriff auf OpenAI, Anthropic oder andere US-Provider. Personenbezogene Daten in Prompts minimieren.
DatenschutzDSGVO Art. 28

Recht auf Löschung

Review

Jede Person kann verlangen, dass ihre Daten vollständig gelöscht werden ("Recht auf Vergessenwerden").

Anforderung: Löschfunktion pro Entität (Benutzer, Kunde, etc.), kaskadierendes Löschen aller verknüpften Daten (Runs, Events, Logs). Manuelle Prüfung erforderlich.
DatenschutzDSGVO Art. 17

Einwilligung & Rechtsgrundlage

Review

Jede Datenverarbeitung (Speichern, Auswerten, Weitergeben) braucht eine dokumentierte Rechtsgrundlage.

Anforderung: Pro Verarbeitungszweck: Welche Daten? Warum? Auf welcher Basis (Vertrag, berechtigtes Interesse, Einwilligung)? Manuelle Prüfung erforderlich.
DatenschutzDSGVO Art. 6

SSL/TLS Verschlüsselung

Manuell

Jede Verbindung zur App und zur Datenbank muss verschlüsselt sein. Kein unverschlüsselter HTTP-Traffic.

Anforderung: HTTPS erzwungen (certbot SSL), gültiges Zertifikat, TLS 1.2+, Datenbank-Verbindung über SSL. Manuelle Prüfung.
InfrastrukturBSI APP.4.4.A7

Firewall & Netzwerk-Segmentierung

Manuell

Server und Datenbanken sind per Firewall geschützt. Nur die nötigsten Ports sind offen.

Anforderung: PostgreSQL: Nur vom App-Server erreichbar. nginx: Nur Ports 80/443. SSH: Nur Key-basiert, kein Passwort-Login. Manuelle Prüfung.
InfrastrukturBSI NET.3.2

System-Updates

Manuell

Betriebssystem, Node.js Runtime und alle Abhängigkeiten müssen aktuell gehalten werden.

Anforderung: Node.js: Aktuelle LTS-Version. Ubuntu: Automatische Sicherheits-Patches (unattended-upgrades). npm: Regelmäßig npm audit. Manuelle Prüfung.
InfrastrukturBSI OPS.1.1.3

npm Audit (keine kritischen Vulnerabilities)

Automatisch

Keine verwendeten npm-Pakete mit bekannten Sicherheitslücken. npm audit prüft alle Abhängigkeiten gegen die CVE-Datenbank.

Anforderung: npm audit zeigt keine critical oder high Vulnerabilities. Geprüft wird: package-lock.json existiert (Voraussetzung für Audit).
AbhängigkeitenOWASP A06:2021

Lockfile vorhanden

Automatisch

package-lock.json muss im Repository committet sein. Fixiert die exakten Versionen aller Abhängigkeiten.

Anforderung: package-lock.json existiert im Repo. Garantiert, dass auf jedem Server exakt die gleichen Paketversionen installiert werden.
AbhängigkeitenOWASP A08:2021

Kein eval() oder dynamisches Code-Execution

Automatisch

Der Code darf niemals eval() oder new Function() verwenden. Diese Funktionen führen Strings als Code aus — ein Angreifer könnte darüber beliebigen Code auf dem Server ausführen.

Anforderung: Kein eval() und kein new Function() im gesamten Quellcode (außer package-lock.json). Automatisch geprüft.
Code-SicherheitOWASP A03:2021

Parametrisierte SQL-Queries

Review

Alle Datenbank-Abfragen müssen Parameter-Platzhalter ($1, $2) verwenden, nie String-Verkettung mit Benutzereingaben.

Anforderung: Prepared Statements mit Paramter-Bindings. Keine Template-Literals (\`SELECT * FROM ... WHERE id = ${userInput}\`). Manuelle Code-Review erforderlich.
Code-SicherheitOWASP A03:2021

XSS-Schutz

Automatisch

Benutzereingaben dürfen nie als HTML gerendert werden. React escaped standardmäßig — aber dangerouslySetInnerHTML umgeht diesen Schutz.

Anforderung: Kein dangerouslySetInnerHTML mit Daten aus Benutzereingaben oder externen Quellen. React-Standard-Escaping nutzen. Automatisch geprüft.
Code-SicherheitOWASP A07:2021

Keine Hardcoded Secrets

Automatisch

Keine Passwörter, API-Keys, Tokens oder Datenbankzugangsdaten im Quellcode. Alles in Umgebungsvariablen.

Anforderung: .gitignore muss .env.local enthalten. Alle Secrets stehen nur in .env.local (lokal) oder als GitHub Secrets (CI/CD) — nie im Git-Repository.
Secrets ManagementOWASP A07:2021

.env.example ohne echte Werte

Review

Die .env.example darf nur Platzhalter enthalten (z.B. DATABASE_URL=postgresql://...), nie echte Zugangsdaten.

Anforderung: Manuelle Prüfung: Keine echten Passwörter, API-Keys oder Connection-Strings in .env.example.
Secrets Management

Secret-Rotation

Manuell

Alle Zugangsdaten werden regelmäßig gewechselt — mindestens jährlich, sofort bei Verdacht auf Kompromittierung.

Anforderung: DB-Passwörter, API-Keys, NEXTAUTH_SECRET: Mindestens 1x pro Jahr rotieren. Bei Mitarbeiter-Austritt: Sofort alle Secrets wechseln, auf die die Person Zugriff hatte.
Secrets ManagementBSI ORP.4.A8

Datenbank-Backup

Manuell

Die Datenbank wird automatisch gesichert. Bei Datenverlust (Fehler, Angriff, Hardware-Ausfall) kann der Zustand zu jedem Zeitpunkt wiederhergestellt werden.

Anforderung: IONOS PostgreSQL: Automatische tägliche Backups, 7-35 Tage Aufbewahrung, Point-in-Time Recovery möglich. Manuelle Prüfung.
Backup & RecoveryBSI CON.3

Recovery-Test

Manuell

Backups werden regelmäßig getestet, indem eine echte Wiederherstellung durchgeführt wird.

Anforderung: Mindestens halbjährlich: Test-Restore einer Datenbank-Sicherung auf eine Test-Instanz. Prüfen ob alle Daten vollständig sind.
Backup & RecoveryBSI CON.3.A5

Orchestration Tracking

Automatisch

Alle kritischen Operationen (Datenbankänderungen, AI-Aufrufe, Importe, Exporte) werden automatisch protokolliert.

Anforderung: ProcessRun aus lib/process-tracking.ts für alle wichtigen Vorgänge: Wer hat wann was ausgelöst? Wie lange hat es gedauert? Was war das Ergebnis?
Audit & LoggingDSGVO Art. 5 Abs. 2

Benutzer-Aktionen loggen

Review

Jede Datenänderung speichert, wer sie wann vorgenommen hat. Lückenloser Audit-Trail.

Anforderung: Alle Datenbank-Tabellen mit Benutzerdaten: created_by, updated_by, created_at, updated_at. Manuelle Code-Review erforderlich.
Audit & LoggingDSGVO Art. 15

Health-Check Endpoint

Automatisch

Jede App hat einen /api/health Endpoint der automatisch alle 60 Sekunden abgefragt wird.

Anforderung: GET /api/health gibt HTTP 200 + JSON mit Status, Uptime und DB-Verbindung zurück. Wird vom myp2cx Live-Monitoring überwacht.
Verfügbarkeit

Error-Handling in API-Routes

Review

Jede API-Route fängt Fehler sauber ab und meldet sie an das zentrale Error-Logging. Kein Absturz, keine kryptischen Fehlermeldungen.

Anforderung: try/catch in allen API-Handlern (GET, POST, PATCH, DELETE). Im catch: logError() aufrufen + verständliche Fehlermeldung an den Client. Manuelle Prüfung.
VerfügbarkeitOWASP A05:2021