Keamanan Sistem
Diperbarui 20 Juli 2026
Keamanan Sistem
Halaman ini menjelaskan fitur-fitur keamanan yang diimplementasikan dalam geoMDB-hub, ditujukan untuk Admin dan pengguna teknis.
Autentikasi
Session-Based Authentication
- Login menghasilkan session token yang disimpan di cookie HTTP-only (tidak dapat diakses JavaScript)
- Cookie bersifat Secure (hanya dikirim via HTTPS) bila aplikasi berjalan di HTTPS
- Session memiliki TTL dan diinvalidasi saat logout
OTP (One-Time Password)
Bila OTP Login diaktifkan (default: aktif):
- Setelah memasukkan email + password yang benar, pengguna mendapat kode OTP via email
- Kode berlaku singkat dan satu kali pakai
- Mencegah akses meski password bocor
Lupa Password
- Reset password melalui email — link berlaku terbatas waktu
- Link hanya valid sekali pakai
Otorisasi & Pemisahan Tugas
Role-Based Access Control (RBAC)
Setiap endpoint dikontrol berdasarkan peran:
| Peran | Cakupan akses |
|---|---|
| PRODUSEN | Hanya metadata instansinya sendiri |
| PEMERIKSA | Metadata instansinya + (opsional) lintas org |
| WALIDATA | Semua metadata semua instansi (baca); QA & publish |
| ADMIN | Akses penuh |
Separation of Duties (Four-Eyes)
Bila aktif:
- Produsen tidak dapat menyetujui metadata yang dibuatnya sendiri
- Walidata yang sama dengan Produsen tidak dapat menerbitkan karyanya sendiri
- Wajib ada pihak berbeda pada setiap tahap
Pemeriksa Lintas Organisasi
- Dikendalikan per-org oleh Walidata/Admin
- Sistem mengecek flag
allowLintasOrgReviewerpada setiap akses dan submit - Menonaktifkan flag setelah ada DRAFT/PENDING akan menampilkan peringatan jumlah record yang terdampak
Rate Limiting
Endpoint publik dilindungi rate limiting per IP:
| Endpoint | Batas | Window |
|---|---|---|
/api/verify/{token} | 20 req | 60 detik |
/api/walidata/konfirmasi | 10 req | 60 detik |
| (endpoint lain) | sesuai konfigurasi |
Melebihi batas → HTTP 429 Too Many Requests. Tunggu sebentar dan coba lagi.
Keamanan Token
Token Konfirmasi Atasan
- Dihasilkan dengan HMAC-SHA256 menggunakan secret unik server
- Format: base64url, 43 karakter
- Berlaku 14 hari
- Satu kali pakai
Token Verifikasi Dokumen (TTE)
- Dihasilkan dengan HMAC-SHA256
- Format: base64url, 43 karakter
- Permanen (tidak kedaluwarsa) — dipakai untuk memverifikasi dokumen seumur hidup
- Tertanam sebagai QR code di PDF
Validasi Format Token
Sebelum query ke database, sistem memvalidasi format token dengan regex:
/^[A-Za-z0-9_-]{43}$/
Token dengan format tidak valid langsung ditolak dengan HTTP 404 (tidak ada query DB).
Keamanan Notifikasi
Email — Perlindungan Header Injection
- Semua field user-controlled (judul metadata, nama, catatan) di-sanitasi sebelum dimasukkan ke Subject email
- Karakter
,,dihapus untuk mencegah injeksi header SMTP - Body HTML menggunakan escaping:
&,<,>,"dikonversi ke HTML entities
WhatsApp — Perlindungan Format Injection
- Karakter format WA (
*,_,~, backtick) dihapus dari field bebas (catatan) - Mencegah manipulasi formatting pesan
Perlindungan Race Condition (TOCTOU)
Submit QC/QE dilindungi dari race condition dengan:
- SELECT FOR UPDATE pada baris MetadataRecord di dalam transaksi
- Re-check keberadaan submission concurrent di dalam transaksi (setelah lock)
- Mencegah dua Pemeriksa berbeda mengirim dokumen untuk metadata yang sama secara bersamaan
Keamanan Infrastruktur
HTTPS
Sangat direkomendasikan menempatkan reverse proxy (Nginx, Caddy, Traefik) di depan aplikasi yang menangani HTTPS/TLS. Aplikasi di belakang proxy harus mempercayai header X-Forwarded-For hanya dari proxy yang dikenal.
Environment Variables Sensitif
Credential sensitif (password SMTP, passphrase PKI, BSRE API key, PKI cert path) disimpan sebagai:
- Variabel environment server (tidak pernah di-commit ke repositori)
- Terenkripsi di database untuk credential yang dikonfigurasi via dashboard
MinIO / Object Storage
- PDF yang ditandatangani disimpan di MinIO dengan akses terkontrol
- Tidak ada URL publik langsung ke file — selalu melalui API yang memverifikasi autentikasi
Content Security Policy (CSP)
Header CSP diterapkan di seluruh halaman aplikasi untuk mencegah injeksi konten berbahaya (XSS).
Audit Trail
Seluruh aksi sensitif dicatat di Activity Log:
- Submit, approve, reject, sign metadata
- Perubahan konfigurasi (mode alur, SMTP, PKI, atasan)
- Login, logout, reset password
- Import/ekspor massal
Audit log dapat diakses oleh Admin via menu Analitik → Log Aktivitas.
Pelaporan Kerentanan
Jika Anda menemukan kerentanan keamanan, laporkan ke Admin sistem atau tim pengembang. Jangan publikasikan kerentanan sebelum ada perbaikan.