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.

Häufige Fragen zur Sicherheit

Wo befinden sich die Server physisch und wer besitzt die Daten?

Server stehen im Hetzner-Rechenzentrum in Frankfurt, Deutschland (EU). Datenverantwortlich ist der MyFina-Eigentümer — keine Aggregator-Vermittler, keine US-Cloud-Anbieter. Die vollständige Liste der Subprozessoren finden Sie auf /security/subprocessors.

Was passiert mit meinen Daten, wenn MyFina schließt?

Mindestens 30 Tage im Voraus erhalten Sie eine E-Mail-Benachrichtigung mit einem „Alles herunterladen"-Button (CSV / XLSX / PDF). Nach der Frist wird die Datenbank zerstört. Das ist eine vertragliche Verpflichtung in unseren AGB, kein Marketingversprechen.

Kann ich mein Konto vollständig löschen?

Ja. Einstellungen → Daten → Konto löschen ist ein Hard-Delete in einer einzelnen DB-Transaktion: Transaktionen, Konten, Kategorien, Tokens und Marketing-Leads zur gleichen E-Mail werden kaskadierend gelöscht. Kein Soft-Delete, keine „nur für den Fall"-Archive. Vollständig konform mit DSGVO Art. 17.

Wer innerhalb von MyFina sieht meine Finanzdaten?

Niemand vom „Personal" hat Routinezugriff auf Ihre Finanzdaten. Der Eigentümer kann nur bei einem Sicherheitsvorfall oder auf Ihre ausdrückliche Support-Anfrage auf die Datenbank zugreifen. Alle Admin-Aktionen werden in audit_log mit IP und User-Agent protokolliert.

Wenn mein Laptop gestohlen wird — schützt mich das MyFina-Passwort?

Browser-Sitzungen sind JWTs mit TTL, kein „dauerhaft eingeloggt". Wenn Ihr aktueller Browser abgemeldet ist, kann sich niemand ohne Passwort anmelden. Bei aktiver Sitzung — verwenden Sie OS-Lock-Screen und/oder ändern Sie das Passwort von einem anderen Gerät (dies invalidiert alle aktiven Sitzungen sofort).

Sind Sie mit Google Analytics, Facebook Pixel oder anderen Trackern verbunden?

Nein. Auf Nutzerseiten läuft kein einziges Analytics-Skript. Das Cookie-Banner zeigt nur zwei Kategorien — essential (NextAuth-Sitzung) und functional (Referral-Links). Keine Analytics-Kategorie, weil es nichts zu analysieren gibt.

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).
  • Offene API-Spezifikation: 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