security
Saya memperlakukan keamanan sebagai bagian dari desain, bukan checklist akhir.
Halaman ini merangkum pendekatan keamanan yang benar-benar saya terapkan di blogcms dan CafePOS — termasuk celah yang pernah ditemukan dan bagaimana ditutup.
fokus area
Tiga pilar yang selalu saya audit
authentication
Identitas & Sesi
OTP, 2FA, riwayat login, dan manajemen sesi yang bisa dicabut sewaktu-waktu tanpa harus mengganti password.
authorization
IDOR & Tenant Isolation
Memastikan ID yang bisa ditebak tidak pernah cukup untuk mengakses data milik pengguna atau tenant lain.
data hygiene
Credential & Secret Management
Rotasi .env, pemisahan secret per environment, dan audit log untuk aksi sensitif.
threat & mitigation log
Temuan nyata dan cara penanganannya
| Area | Temuan | Mitigasi | Severity |
|---|---|---|---|
| CafePOS — Mobile API | Token mobile awal tidak divalidasi ulang saat request order, memungkinkan reuse token lintas sesi. | Overhaul autentikasi mobile: signed token dengan expiry pendek + validasi ulang di setiap request sensitif. | high |
| CafePOS — Order Endpoint | ID order berurutan bisa ditebak, berpotensi membuka data order tenant lain (IDOR). | Semua query order dipaksa lewat helper tenant-scoped; ID diverifikasi terhadap tenant_id sebelum data dikembalikan. | high |
| blogcms — Sessions | Tidak ada cara bagi user melihat/mengakhiri sesi aktif di device lain. | Ditambahkan halaman session management + login history agar user bisa memutus akses dari device asing. | medium |
| Deployment — .env | Credential lama sempat tercampur antara environment development dan production. | Rotasi penuh secret + pemisahan file .env per environment dengan permission ketat. |
medium |
| CafePOS — QR Ordering | QR meja berpotensi difoto ulang dan dipakai di luar konteks sesi asli. | QR token ditandatangani dan diberi masa berlaku singkat, terikat ke sesi meja aktif. | low |
practices
Yang saya lakukan di setiap project baru
Semua query sensitif lewat satu helper tenant-scoped
Tidak ada view yang boleh query langsung ke model untuk data milik tenant — lihat contoh nyatanya di catatan IDOR ini.
404, bukan 403, untuk objek milik orang lain
Membedakan "tidak ada" dari "ada tapi bukan milikmu" sendiri sudah membocorkan informasi ke penyerang.
Token bertanda tangan (HMAC) untuk akses tanpa login
Dipakai di alur QR pemesanan CafePOS — punya expiry, tidak bisa dipalsukan tanpa secret key server.
2FA dan audit log untuk akun dengan hak admin
Diterapkan di blogcms-v14.6 — termasuk riwayat login dan kemampuan revoke sesi dari jarak jauh.
Password & secret tidak pernah masuk ke git
.env di-gitignore sejak commit pertama, bukan ditambahkan belakangan setelah kebocoran.
Security header dasar diaktifkan saat deploy
CSP, X-Frame-Options, dan Referrer-Policy diset lewat konfigurasi hosting, bukan cuma diandalkan dari kode aplikasi.
masih belajar, tetap transparan