🔓 Broken Access Control
Broken Access Control terjadi saat pengguna bisa melakukan aksi (lihat, ubah, hapus) data yang seharusnya tidak mereka punya akses. Ini adalah celah yang sangat berbahaya!
🔍 Contoh-Contoh Masalah
- IDOR (Insecure Direct Object References): URL /profile?id=5 bisa diganti ke id user lain.
- Force Browsing: Mengakses URL admin tanpa hak akses (misal /admin/).
- Vertical Privilege Escalation: User biasa bisa jadi admin.
- Horizontal Privilege Escalation: User A akses data User B.
💻 Contoh Kode yang Salah (Rentan)
<?php // User id didapat dari URL tanpa validasi $userId = $_GET['id']; $query = "SELECT * FROM users WHERE id = $userId"; $result = mysqli_query($conn, $query); ?>
🔎 Penjelasan: Kode ini membiarkan siapa saja melihat data user lain dengan mengganti parameter id!
🛡️ Cara Mencegah (dengan Contoh Kode)
1️⃣ Validasi Role / Hak Akses di Server
<?php session_start(); if ($_SESSION['role'] !== 'admin') { die("Akses Ditolak!"); } ?>
🔎 Penjelasan: Server harus selalu cek role user, meskipun di frontend disembunyikan.
2️⃣ Middleware (Node.js Express contoh)
function cekAdmin(req, res, next) { if (req.user.role !== 'admin') { return res.status(403).send("Akses ditolak!"); } next(); } app.get('/admin', cekAdmin, (req, res) => { res.send("Selamat datang admin!"); });
🔎 Penjelasan: Middleware ini memastikan hanya admin yang bisa akses /admin.
3️⃣ Hak Akses Minimum di Database
🔎 Penjelasan: Gunakan user database dengan akses minimum (SELECT saja, jangan ALL PRIVILEGES!).
4️⃣ Audit & Logging
🔎 Penjelasan: Log semua request sensitif. Audit log untuk mendeteksi percobaan bypass!