# Sicherheit Dieses Dokument hält fest, was ProxLedger gegen die üblichen Angriffe tut – und was es **nicht** tut. Die Gliederung folgt den OWASP Top 10 (2021). ## A01 – Fehlerhafte Zugriffskontrolle - `src/proxy.ts` schickt jede Anfrage ohne gültige Sitzung zur Anmeldung. Öffentlich sind nur die Anmeldung, die Agent-API (eigene Tokens), die Gesundheitsprüfung, die beiden Agent-Skripte und die Symbole. - **Jede Server Action prüft zusätzlich selbst** (`sitzungErforderlich()`). Server Actions sind eigene Endpunkte; eine einzige Schutzschicht davor wäre zu wenig, falls der Musterausdruck im Proxy je danebengreift. - Die Prüfung geht in die Datenbank: Ein gesperrtes Konto oder ein Widerruf beendet laufende Sitzungen sofort (`npm run benutzer -- sperren `), statt bis zum Ablauf des Tokens zu warten. - Die Anmeldung prüft den `Origin`, damit keine fremde Seite jemanden unbemerkt in ein untergeschobenes Konto anmeldet (Login-CSRF). Für Server Actions erledigt das Next.js selbst. **Nicht vorhanden:** Rollen. Wer angemeldet ist, darf alles. Für ein Werkzeug, das ein Systemhaus intern betreibt, ist das vertretbar – für mehrere Mandanten wäre es das nicht. ## A02 – Kryptografische Fehler - Passwörter: argon2id (`@node-rs/argon2`), keine eigene Krypto. - Sitzungen: signiertes JWT (HS256) aus `APP_SECRET`, 12 Stunden gültig, Cookie `httpOnly`, `sameSite=lax` und `secure`, sobald `APP_URL` auf `https://` steht. - Zugangsdaten für SMTP und Webhooks liegen AES-256-GCM-verschlüsselt in der Datenbank (`src/lib/geheimnisse.ts`); der Schlüssel wird aus `APP_SECRET` abgeleitet. - Agent- und Enrollment-Tokens werden nur als SHA-256-Hash gespeichert. Das ist hier richtig und nicht zu schwach: Die Tokens sind 32 Byte Zufall, es gibt nichts zu raten. **Wichtig:** `APP_SECRET` ist der Generalschlüssel. Geht er verloren, sind alle Sitzungen ungültig und die gespeicherten Zugangsdaten unlesbar. Er gehört in die Sicherung. ## A03 – Injektion - Datenbankzugriffe ausschließlich über Prisma mit gebundenen Werten; kein `$queryRawUnsafe` im Projekt. - Ausgaben maskiert React selbst. - Zusätzlich greift eine Content-Security-Policy mit frischem Nonce je Anfrage und `strict-dynamic` (`src/proxy.ts`). Eingeschleustes `