Lewati ke isi

Sentra Series — Security Patterns Baseline

Pattern berikut adalah baseline yang wajib ada di semua sistem Sentra. Detail spesifik per sistem (mis. PCI compliance Retail, HIPAA-equivalent Healthcare) ditulis sebagai delta di systems/<x>/07-ops.md.

1. Immutable Audit Log dengan Hash Chain

Setiap aktivitas sensitif (void, refund, diskon manual, laci kasir terbuka, perubahan harga, perubahan permission) ditulis ke jurnal ledger yang di-hash secara rantai kriptografis:

audit_log[N].hash = SHA256(audit_log[N-1].hash || audit_log[N].payload || timestamp)

Staf IT internal tidak dapat menghapus / mengubah record tanpa merusak integritas chain — divalidasi periodik oleh background job.

2. Supervisor Bypass PIN

Setiap aktivitas yang dapat menjadi vektor fraud staf kasir (void item, refund, diskon manual di luar promo, akses laporan keuangan) wajib memicu prompt PIN supervisor / sidik jari manajer cabang. PIN supervisor di-hash dengan Argon2id.

3. RBAC Branch-Scoped Permission

User punya: - Role (Owner, Manajer Cabang, Kasir, Staf, Auditor) - Branch scope (list cabang yang boleh diakses)

Permission cek selalu (role.has_permission(action) AND user.branches.contains(target_branch)).

4. Encrypted Local SQLite via SQLCipher

POS Client desktop (Electron/Tauri) menyimpan database lokal di SQLite. Wajib dienkripsi dengan SQLCipher (AES-256-GCM). Key derivation dari user PIN + machine ID, key live di OS Keystore (Windows Credentials Manager / macOS Keychain).

5. PJSP Callback Verification (Anti-Fraud QRIS)

Status transaksi POS TIDAK boleh berubah ke PAID berdasarkan input kasir / screenshot e-wallet. Status hanya berubah ketika menerima callback signed dari Payment Gateway (Midtrans/Xendit) yang diverifikasi via HMAC signature.

6. Secret Management

  • Secrets (API keys, DB passwords) tidak boleh ada di repo.
  • Production: AWS Secrets Manager / HashiCorp Vault.
  • Development: .env.local di-gitignore + .env.example di-commit sebagai template.

7. API Rate Limiting

  • Anonymous: 30 req/min per IP
  • Authenticated: 600 req/min per user
  • Bulk endpoints (export laporan): 10 req/min per user