Sicherheit

Sicherheit, klar erklärt

MyFina ist eine Haushaltsbuchhaltung. Finanzdaten sind etwas Besonderes — hier zeigen wir, wie sie geschützt sind, ohne Marketing-Floskeln.

Drei kurze Antworten auf die wichtigsten Fragen

Wie wird verschlüsselt

TLS 1.3 bei der Übertragung (Let's Encrypt). Externe API-Schlüssel, Bank-Tokens und Broker-Geheimnisse — AES-256-GCM mit eindeutigem IV pro Datensatz. Passwörter — bcrypt (12 Runden). Der Verschlüsselungsschlüssel liegt in env, nicht in der Datenbank.

Wo wird gespeichert

PostgreSQL 16 in einer managed Instanz bei Hetzner (Deutschland, EU). Isoliertes Docker-Netzwerk, keine externen Verbindungen zur Datenbank. Backups — täglich, vor dem Upload verschlüsselt, 30 Tage Aufbewahrung.

Wie wird gelöscht

Hard-Delete des Kontos in einem Schritt: Transaktionen, Konten, Kategorien, Währungen, Tokens werden kaskadiert entfernt. Keine Soft-Delete-Tabellen, kein „nur für den Notfall“-Archiv. Marketing-Leads unter derselben E-Mail — eigener Erase-Hook (GDPR Art. 17).

Sechs Säulen der Absicherung

Authentifizierung

NextAuth.js v5 auf JWT, Passwörter mit bcrypt gehasht. Login-Throttling — 5 Versuche / 15 Min pro Identifier und 20 / 15 Min pro IP. Optional Google OAuth. Passwort-Reset über einen 32-Byte-Token; in der Datenbank liegt nur dessen SHA-256.

Verschlüsselung „at rest“

Externe API-Schlüssel (Banken, Resend, Anthropic) und Broker-Geheimnisse werden mit AES-256-GCM verschlüsselt. Der Schlüssel verlässt nie den Server. Jede Bankanbindung trägt ein eigenes 32-Byte-Hex-Webhook-Geheimnis.

Isolation der Nutzerdaten

Jede UPDATE/DELETE-Operation filtert nach `userId`. IDOR-Schutz ist zentralisiert in `assertCanAccessAccount/Category` — Zugriff auf fremde Konten liefert 403, nicht 404. Geteilte Familienkonten nutzen explizite OWNER/MEMBER/VIEWER-Rollen.

Sitzungen & Revocation

JWT mit inkrementierender `session_version`. Passwortänderung, Kontosperre oder Rollenwechsel invalidieren alle aktiven Sitzungen. Refresh-Tokens der Mobile-API rotieren bei jedem Refresh.

GDPR & Privatsphäre

Hard-Delete des Kontos entfernt alle Transaktionen, Konten und Kategorien kaskadiert in einer einzigen Transaktion. Datenexport — CSV/XLSX/PDF mit einem Klick. Cookie-Consent mit zwei Kategorien (essential / functional), keine Analytik, keine Tracker.

Audit & Nachvollziehbarkeit

Alle Admin-Aktionen und sensiblen Benutzeroperationen werden in `audit_log` mit IP, User-Agent und Source geschrieben. Login-Versuch-Logs werden 30 Tage aufbewahrt. Stripe-Webhook-Events liegen in einem eigenen Idempotency-Journal für sicheren Replay bei Ausfällen.

Was wir NICHT tun

  • Wir verkaufen oder teilen Ihre Daten nicht mit Dritten. Unsere Einnahmequelle ist das Pro-Abo, nicht Werbung.
  • Wir betreiben keine Webanalyse oder Tracker auf Nutzerseiten — kein Google Analytics, Mixpanel, Hotjar.
  • Wir speichern Passwörter nicht im Klartext — bcrypt mit 12 Runden, keine Backdoor-Recovery.
  • Wir betten Ihren Saldo oder Ihre Transaktionen nicht auf Partnerseiten ein — kein Widget, nichts zum Leaken.

Bank-Sync — was genau geteilt wird

Wenn Sie Monobank oder eine PSD2-Bank über GoCardless verbinden, erhalten wir nur das, was zur Synchronisation der Transaktionen nötig ist: Ausgangszahlungen, eingehende Überweisungen, Kontostände. Keine bankseitigen Personendaten (Pass, Foto, Biometrie). Das Bank-API-Token wird AES-256-GCM-verschlüsselt gespeichert; Sie können den Zugriff mit einem Klick unter Einstellungen → Banken widerrufen. Die GoCardless-Einwilligung läuft gemäß PSD2 alle 90 Tage ab — wir erinnern 7 Tage im Vorhinein.

Was Sie selbst überprüfen können

Jede Aussage oben ist über Code und API auditierbar.

  • Verschlüsselung: src/lib/crypto.ts (AES-256-GCM, randomBytes IV, Auth-Tag).
  • Authentifizierung: src/auth.ts, src/lib/auth/rate-limit.ts.
  • Autorisierung: src/lib/auth/ownership.ts (assertCanAccessAccount).
  • Open API: https://app.my-fina.com/api/openapi (OpenAPI 3.1).
  • Health-Endpoint: https://app.my-fina.com/api/health (öffentliches Liveness).

Sicherheitsbenachrichtigungen erhalten

Abonnieren Sie, um über CVEs, Sicherheitspatches und Änderungen am Bedrohungsmodell informiert zu werden. Kein Marketing.

Bei Pro-Start benachrichtigen

Eine E-Mail. Kein Spam. Ein-Klick-Abmeldung.

GDPR-konform · Datenverarbeitung in der EULetzte Aktualisierung: 3. Juni 2026