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.

Časté otázky o bezpečnosti

Kde fyzicky leží servery a kdo vlastní data?

Servery jsou v datacentru Hetzner ve Frankfurtu, Německo (EU). Správcem dat je vlastník MyFina — žádní agregátorští prostředníci, žádní US-cloudoví poskytovatelé. Kompletní seznam subprocesorů je na /security/subprocessors.

Co se stane s mými daty, pokud MyFina skončí?

Minimálně 30 dní před uzavřením vám pošleme email s upozorněním a tlačítkem „Stáhnout vše" ve formátech CSV / XLSX / PDF. Po grace-období bude databáze zničena. Je to provozní závazek v podmínkách služby, ne marketingový slib.

Mohu úplně smazat svůj účet?

Ano. Nastavení → Data → Smazat účet je hard-delete v jedné DB transakci: kaskádovitě se mažou transakce, účty, kategorie, tokeny a marketingové leady ke stejnému emailu. Žádný soft-delete, žádné archivy „pro jistotu". Plně v souladu s GDPR čl. 17 („právo být zapomenut").

Kdo uvnitř MyFiny vidí má finanční data?

Nikdo z „personálu" nemá rutinní přístup k vašim finančním řádkům. Vlastník se dostane k databázi pouze během bezpečnostního incidentu nebo na vaši explicitní žádost přes support. Všechny administrátorské akce se zaznamenávají do audit_log s IP a user-agentem.

Pokud mi ukradnou notebook — ochrání mě heslo MyFiny?

Sezení v prohlížeči je JWT s TTL, ne „přihlášen navždy". Pokud je váš aktuální prohlížeč odhlášený, nikdo se bez hesla nepřihlásí. Pokud sezení běží — doporučujeme používat lock-screen OS a/nebo změnit heslo z jakéhokoli jiného zařízení (to okamžitě zneplatní všechny aktivní sezení).

Jste napojeni na Google Analytics, Facebook Pixel nebo jiné trackery?

Ne. Na uživatelských stránkách neběží jediný analytický skript. Cookie banner ukazuje pouze dvě kategorie — essential (NextAuth sezení) a functional (referenční odkazy). Žádná analytická kategorie není, protože není co analyzovat.

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