Bezpieczeństwo

Bezpieczeństwo bez ściemy

MyFina to domowa księgowość. Dane finansowe są wyjątkowe — pokazujemy, jak są chronione, bez marketingowej waty.

Trzy krótkie odpowiedzi na najważniejsze pytania

Jak jest szyfrowane

TLS 1.3 w transmisji (Let's Encrypt). Zewnętrzne klucze API, tokeny bankowe i sekrety brokerów — AES-256-GCM z unikalnym IV na rekord. Hasła — bcrypt (12 rund). Klucz szyfrujący żyje w env, a nie w bazie.

Gdzie jest przechowywane

PostgreSQL 16 w zarządzanej instancji w Hetzner (Niemcy, UE). Izolowana sieć Docker, brak zewnętrznych połączeń do bazy. Kopie zapasowe — codzienne, szyfrowane przed wysyłką, retencja 30 dni.

Jak jest usuwane

Hard-delete konta w jednym kroku: kaskadowo usuwane są transakcje, konta, kategorie, waluty, tokeny. Bez tabel soft-delete, bez archiwum „na wszelki wypadek”. Leady marketingowe z tego samego e-maila — osobny erase-hook (GDPR Art. 17).

Sześć filarów obrony

Uwierzytelnianie

NextAuth.js v5 na JWT, hasła hashowane bcryptem. Throttling logowania — 5 prób / 15 min na identyfikator i 20 / 15 min na IP. OAuth Google opcjonalnie. Reset hasła — 32-bajtowy token, w bazie tylko jego SHA-256.

Szyfrowanie „at rest”

Zewnętrzne klucze API (banki, Resend, Anthropic) i sekrety brokerów są szyfrowane AES-256-GCM. Klucz nigdy nie opuszcza serwera. Per-connection sekrety webhooków — 32-bajtowe hex dla każdej integracji bankowej.

Izolacja danych użytkownika

Każda operacja UPDATE/DELETE filtruje po `userId`. Ochrona IDOR jest scentralizowana w `assertCanAccessAccount/Category` — próba dostępu do cudzego konta zwraca 403, nie 404. Wspólne konta rodzinne działają na jawnych rolach OWNER/MEMBER/VIEWER.

Sesje i revocation

JWT z inkrementującym się `session_version`. Zmiana hasła, blokada konta lub zmiana roli unieważniają wszystkie aktywne sesje. Refresh-tokeny mobilnego API są rotowane przy każdym odświeżeniu.

GDPR i prywatność

Hard-delete konta usuwa wszystkie transakcje, konta i kategorie kaskadowo w jednej transakcji. Eksport danych — CSV/XLSX/PDF jednym kliknięciem. Cookie consent z trzema kategoriami (essential / functional / analytics), wspólny dla strony i aplikacji: GA4 działa dopiero po zgodzie, bez profilowania reklamowego.

Audyt i obserwowalność

Wszystkie akcje administratora i wrażliwe operacje użytkownika trafiają do `audit_log` z IP, user-agentem i source. Logi prób logowania są przechowywane 30 dni. Zdarzenia webhooków Stripe — osobny dziennik idempotency dla bezpiecznego replay przy awariach.

Czego NIE robimy

  • Nie sprzedajemy ani nie udostępniamy Twoich danych stronom trzecim. Źródłem dochodu jest subskrypcja Pro, nie reklamy.
  • Nie używamy trackerów reklamowych ani profilowania — brak Facebook Pixel, Mixpanel, Hotjar. Google Analytics 4 działa dopiero po Twojej zgodzie.
  • Nie przechowujemy haseł w postaci jawnej — bcrypt z 12 rundami, bez backdoor-recovery.
  • Nie osadzamy Twojego salda ani transakcji na stronach partnerskich — żadnego widgetu, nic do wycieku.

Synchronizacja bankowa — co dokładnie jest przekazywane

Jeśli podłączysz Monobank lub bank PSD2 przez GoCardless, otrzymujemy tylko to, co jest potrzebne do synchronizacji transakcji: płatności wychodzące, przelewy przychodzące, salda kont. Żadnych danych osobowych po stronie banku (paszport, zdjęcie, biometria). Token API banku jest przechowywany zaszyfrowany AES-256-GCM; możesz cofnąć dostęp jednym kliknięciem w Ustawienia → Banki. Zgoda GoCardless wygasa co 90 dni zgodnie z PSD2 — przypominamy 7 dni wcześniej.

Częste pytania o bezpieczeństwo

Gdzie fizycznie znajdują się serwery i kto jest właścicielem danych?

Serwery znajdują się w centrum danych Hetzner we Frankfurcie, Niemcy (UE). Administratorem danych jest właściciel MyFina — żadnych agregatorów-pośredników, żadnych dostawców chmury z USA. Pełna lista subprocesorów na /security/subprocessors.

Co stanie się z moimi danymi, jeśli MyFina się zamknie?

Co najmniej 30 dni wcześniej wyślemy email z powiadomieniem i przyciskiem „Pobierz wszystko" w formatach CSV / XLSX / PDF. Po okresie grace baza danych zostanie zniszczona. To zobowiązanie operacyjne w warunkach usługi, nie obietnica marketingowa.

Czy mogę całkowicie usunąć swoje konto?

Tak. Ustawienia → Dane → Usuń konto to hard-delete w jednej transakcji DB: kaskadowo wymazywane są transakcje, konta, kategorie, tokeny i leady marketingowe powiązane z tym emailem. Bez soft-delete, bez archiwów „na wszelki wypadek". Zgodne z RODO art. 17.

Kto wewnątrz MyFina widzi moje dane finansowe?

Nikt z „personelu" nie ma rutynowego dostępu do twoich danych finansowych. Właściciel może uzyskać dostęp do bazy tylko podczas incydentu bezpieczeństwa lub na twoją wyraźną prośbę przez support. Wszystkie akcje admina są zapisywane w audit_log z IP i user-agent.

Jeśli ukradną mi laptopa — czy hasło MyFina mnie ochroni?

Sesje w przeglądarce to JWT z TTL, nie „zalogowany na zawsze". Jeśli aktualna przeglądarka jest wylogowana, nikt nie zaloguje się bez hasła. Przy aktywnej sesji — używaj lock-screen OS i/lub zmień hasło z innego urządzenia (to natychmiast unieważnia wszystkie aktywne sesje).

Czy jesteście podłączeni do Google Analytics, Facebook Pixel lub innych trackerów?

Facebook Pixela, Mixpanela ani Hotjara nie mamy. Google Analytics 4 — tak: jeden wspólny kontener GTM działa zarówno na stronie, jak i w aplikacji. Uruchamia się dopiero po Twojej zgodzie w bannerze cookies (kategoria analytics, domyślnie wyłączona) i służy do statystyki webowej oraz pomiaru konwersji Google Ads. Personalizacja reklam jest wyłączona.

Co możesz sprawdzić samodzielnie

Każde stwierdzenie powyżej jest audytowalne w kodzie i API.

  • Szyfrowanie: src/lib/crypto.ts (AES-256-GCM, randomBytes IV, auth tag).
  • Uwierzytelnianie: src/auth.ts, src/lib/auth/rate-limit.ts.
  • Autoryzacja: src/lib/auth/ownership.ts (assertCanAccessAccount).
  • Otwarte API: https://app.my-fina.com/api/openapi (OpenAPI 3.1).
  • Health endpoint: https://app.my-fina.com/api/health (publiczny liveness).

Otrzymuj powiadomienia o bezpieczeństwie

Zapisz się, aby dowiadywać się o CVE, łatkach bezpieczeństwa i zmianach modelu zagrożeń. Bez marketingu.

Powiadom mnie, gdy Pro będzie dostępne

Jeden email. Bez spamu. Wypisanie jednym kliknięciem.

Zgodne z GDPR · dane przetwarzane w UEOstatnia aktualizacja: 3 czerwca 2026