Bagaimana dienkripsi
TLS 1.3 saat transit (Let's Encrypt). Kunci API eksternal, token bank, dan rahasia broker — AES-256-GCM dengan IV unik per record. Password — bcrypt (12 ronde). Kunci enkripsi tinggal di env, bukan di database.
Keamanan
MyFina adalah buku rumah tangga. Data keuangan itu istimewa — kami tunjukkan cara melindunginya, tanpa bualan marketing.
Tiga jawaban singkat untuk pertanyaan besar
TLS 1.3 saat transit (Let's Encrypt). Kunci API eksternal, token bank, dan rahasia broker — AES-256-GCM dengan IV unik per record. Password — bcrypt (12 ronde). Kunci enkripsi tinggal di env, bukan di database.
PostgreSQL 16 di instance managed pada Hetzner (Jerman, UE). Jaringan Docker terisolasi, tanpa koneksi eksternal ke DB. Backup — harian, dienkripsi sebelum diunggah, retensi 30 hari.
Hard-delete akun dalam satu langkah: transaksi, akun, kategori, mata uang, token dihapus secara cascade. Tidak ada tabel soft-delete, tidak ada arsip «untuk berjaga-jaga». Marketing lead dengan email yang sama — erase-hook terpisah (GDPR Pasal 17).
Enam pilar pertahanan
NextAuth.js v5 di atas JWT, password di-hash dengan bcrypt. Login throttling — 5 percobaan / 15 menit per identifier dan 20 / 15 menit per IP. OAuth Google opsional. Reset password pakai token 32-byte; hanya SHA-256-nya yang disimpan.
Kunci API eksternal (bank, Resend, Anthropic) dan rahasia broker dienkripsi dengan AES-256-GCM. Kunci tidak pernah meninggalkan server. Setiap koneksi bank membawa webhook secret hex 32-byte per koneksi.
Setiap UPDATE/DELETE memfilter berdasarkan `userId`. Proteksi IDOR dipusatkan di `assertCanAccessAccount/Category` — akses ke akun pengguna lain mengembalikan 403, bukan 404. Akun keluarga bersama memakai peran eksplisit OWNER/MEMBER/VIEWER.
JWT dengan `session_version` yang naik. Perubahan password, pemblokiran akun, atau perubahan peran membatalkan semua sesi aktif. Refresh token Mobile-API dirotasi setiap refresh.
Hard-delete akun menghapus semua transaksi, akun, dan kategori secara cascade dalam satu transaksi. Ekspor data — CSV/XLSX/PDF dengan satu klik. Cookie consent dengan dua kategori (essential / functional), tanpa analytics, tanpa tracker.
Semua aksi admin dan operasi pengguna sensitif ditulis ke `audit_log` dengan IP, user-agent, dan source. Log percobaan login disimpan 30 hari. Event webhook Stripe duduk di journal idempotency tersendiri untuk replay aman saat gagal.
Yang TIDAK kami lakukan
Jika Anda menghubungkan Monobank atau bank PSD2 lewat GoCardless, kami hanya menerima yang diperlukan untuk sinkronisasi transaksi: pembayaran keluar, transfer masuk, saldo akun. Tanpa data pribadi sisi bank (paspor, foto, biometrik). Token API bank disimpan terenkripsi dengan AES-256-GCM; Anda dapat mencabut akses dengan satu klik dari Pengaturan → Bank. Persetujuan GoCardless berakhir setiap 90 hari sesuai PSD2 — kami mengingatkan 7 hari sebelumnya.
Detail lebih dalam
Daftar lengkap layanan pihak ketiga yang memproses data Anda: Hetzner (hosting), Stripe (penagihan), Resend (email), Anthropic (AI, DRAFT), GoCardless (PSD2), Monobank API, FCM.
Buka daftarMatriks per-fitur: apa yang disimpan, berapa lama, bagaimana dihapus. Alur GDPR Pasal 15/17/20 dan jendela retensi per entitas.
Buka matriksPertanyaan umum tentang keamanan
Server berada di pusat data Hetzner di Frankfurt, Jerman (UE). Pengontrol data adalah pemilik MyFina — tanpa perantara agregator, tanpa penyedia cloud berbasis AS. Daftar lengkap subprosesor di /security/subprocessors.
Setidaknya 30 hari sebelumnya kami akan mengirim email dengan pemberitahuan dan tombol "Unduh semua" dalam format CSV / XLSX / PDF. Setelah masa tenggang database dihancurkan. Ini komitmen operasional dalam Syarat kami, bukan janji pemasaran.
Ya. Pengaturan → Data → Hapus akun adalah hard-delete dalam satu transaksi DB: transaksi, akun, kategori, token, dan lead pemasaran yang terkait dengan email yang sama dihapus secara kaskade. Tanpa soft-delete, tanpa arsip "untuk berjaga-jaga". Sepenuhnya sesuai dengan GDPR Pasal 17.
Tidak ada "staf" yang memiliki akses rutin ke data keuangan Anda. Pemilik hanya dapat mengakses database selama insiden keamanan atau atas permintaan eksplisit Anda melalui support. Semua tindakan admin dicatat di audit_log dengan IP dan user-agent.
Sesi browser adalah JWT dengan TTL, bukan "masuk selamanya". Jika browser Anda saat ini sudah keluar, tidak ada yang bisa masuk tanpa kata sandi. Dengan sesi aktif — gunakan lock-screen OS dan/atau ubah kata sandi dari perangkat lain (ini membatalkan semua sesi aktif secara instan).
Tidak. Kami tidak menjalankan satu pun skrip analitik di halaman pengguna. Banner cookie hanya menampilkan dua kategori — essential (sesi NextAuth) dan functional (tautan referal). Tanpa kategori analytics, karena tidak ada yang dianalisis.
Yang bisa Anda verifikasi sendiri
Setiap klaim di atas dapat diaudit lewat kode dan API.
src/lib/crypto.ts (AES-256-GCM, randomBytes IV, auth tag).src/auth.ts, src/lib/auth/rate-limit.ts.src/lib/auth/ownership.ts (assertCanAccessAccount).https://app.my-fina.com/api/openapi (OpenAPI 3.1).https://app.my-fina.com/api/health (liveness publik).Berlangganan untuk mendengar tentang CVE, patch keamanan, dan perubahan model ancaman. Tanpa marketing.