Dokumentasi

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:

PeranCakupan akses
PRODUSENHanya metadata instansinya sendiri
PEMERIKSAMetadata instansinya + (opsional) lintas org
WALIDATASemua metadata semua instansi (baca); QA & publish
ADMINAkses 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 allowLintasOrgReviewer pada 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:

EndpointBatasWindow
/api/verify/{token}20 req60 detik
/api/walidata/konfirmasi10 req60 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.