Bezpečnost

Bezpečnost srozumitelně

MyFina je domácí účetnictví. Finanční data jsou výjimečná — ukazujeme, jak jsou chráněna, bez marketingové vaty.

Tři krátké odpovědi na hlavní otázky

Jak se šifruje

TLS 1.3 in transit (Let's Encrypt). Externí API klíče, bankovní tokeny a brokerské secrety — AES-256-GCM s unikátním IV na záznam. Hesla — bcrypt (12 kol). Šifrovací klíč žije v env, ne v DB.

Kde se ukládá

PostgreSQL 16 v managed instanci u Hetzneru (Německo, EU). Izolovaná Docker síť, žádná externí připojení k DB. Zálohy — denní, šifrované před uploadem, retence 30 dnů.

Jak se maže

Hard-delete účtu v jednom kroku: kaskádně se odstraní transakce, účty, kategorie, měny, tokeny. Žádné soft-delete tabulky, žádný archiv „pro jistotu“. Marketingové leady na stejný email — samostatný erase-hook (GDPR čl. 17).

Šest pilířů obrany

Autentizace

NextAuth.js v5 na JWT, hesla hashována pomocí bcrypt. Login-throttling 5 pokusů / 15 min na identifikátor a 20 / 15 min na IP. OAuth Google volitelný. Reset hesla — 32-bytový token, v DB jen SHA-256.

Šifrování «at rest»

Externí API klíče (banky, Resend, Anthropic) a brokerské secrety jsou šifrovány AES-256-GCM. Klíč nikdy neopouští server. Per-connection webhook-secrety — 32-byte hex pro každou bankovní integraci.

Izolace dat uživatele

Každá UPDATE/DELETE operace filtruje podle `userId`. IDOR-ochrana je centralizovaná v `assertCanAccessAccount/Category` — pokus o přístup k cizímu účtu vrátí 403, ne 404. Sdílené rodinné účty fungují přes role OWNER/MEMBER/VIEWER.

Relace a revocation

JWT s inkrementálním `session_version`. Změna hesla, zablokování uživatele nebo změna role invalidují všechny aktivní relace. Refresh-tokeny mobilního API se rotují při každém obnovení.

GDPR a soukromí

Hard-delete účtu odstraní všechny transakce, účty a kategorie kaskádně v jedné transakci. Export dat — CSV/XLSX/PDF jedním kliknutím. Cookie consent se dvěma kategoriemi (essential / functional), bez analytiky a trackerů.

Audit a pozorovatelnost

Všechny admin akce a citlivé uživatelské operace se zapisují do `audit_log` s IP, user-agent a source. Logy pokusů o přihlášení se uchovávají 30 dní. Stripe webhook události mají vlastní idempotency-žurnál pro bezpečný replay.

Co NEděláme

  • Neprodáváme ani nesdílíme vaše data se třetími stranami. Zdroj příjmů — Pro předplatné, ne reklama.
  • Nespouštíme webovou analytiku ani trackery na stránkách uživatelů — žádný Google Analytics, Mixpanel, Hotjar.
  • Neukládáme hesla v otevřené podobě — bcrypt s 12 koly, bez backdoor-recovery.
  • Nezobrazujeme zůstatek ani transakce na partnerských stránkách — žádný embed-widget, není co leakovat.

Bankovní synchronizace — co se přesně sdílí

Pokud připojíte Monobank nebo PSD2 banku přes GoCardless, dostáváme jen to, co je potřeba k synchronizaci transakcí: odchozí platby, příchozí převody, zůstatky účtů. Žádná osobní data banky (pas, foto, biometrie). API-token banky se ukládá zašifrovaný AES-256-GCM; přístup můžete odebrat jedním kliknutím v Nastavení → Banky. GoCardless souhlas vyprší každých 90 dní podle PSD2 — upozorníme vás 7 dní předem.

Co si můžete sami ověřit

Každé tvrzení výše je auditovatelné v kódu a API.

  • Šifrování: src/lib/crypto.ts (AES-256-GCM, randomBytes IV, auth tag).
  • Autentizace: src/auth.ts, src/lib/auth/rate-limit.ts.
  • Autorizace: src/lib/auth/ownership.ts (assertCanAccessAccount).
  • Otevřené API: https://app.my-fina.com/api/openapi (OpenAPI 3.1).
  • Health endpoint: https://app.my-fina.com/api/health (veřejný liveness).

Dostávat bezpečnostní upozornění

Přihlaste se k odběru CVE, bezpečnostních záplat a změn modelu hrozeb. Žádný marketing.

Dejte mi vědět, až bude Pro k dispozici

Jeden e-mail. Žádný spam. Odhlášení jedním kliknutím.

GDPR-compliant · data zpracována v EUPoslední aktualizace: 3. června 2026