~/portfolio/security.html
UTF-8 LF HTML5

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

AreaTemuanMitigasiSeverity
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

Saya bukan security expert — tapi saya serius mempelajarinya.

main | Ln 1, Col 1
no problems detected
UTF-8 00:00:00