DEV Community

Cover image for Praktikum Keamanan Web: Mass Assignment Vulnerability πŸ˜±πŸ”“
ahmadasroni38
ahmadasroni38

Posted on

Praktikum Keamanan Web: Mass Assignment Vulnerability πŸ˜±πŸ”“

Halo, teman-teman mahasiswa! Selamat datang di praktikum seru tentang Mass Assignment – vulnerability yang sering disebut "silent killer" di aplikasi modern, terutama yang pakai framework seperti Laravel, Ruby on Rails, atau Node.js. Bayangkan kamu lagi isi form registrasi biasa: nama, email, password. Tapi kalau developer lupa proteksi, hacker bisa "nyelipkan" field rahasia seperti "is_admin = true" dan langsung jadi admin! Kayak kasih kunci rumah ke orang asing tanpa sadar.

Ini bukan serangan rumit kayak SQLi atau XSS, tapi super berbahaya karena gampang dieksploitasi lewat form atau API. Yuk kita bahas santai, dengan contoh Laravel (paling populer di PHP), kode mudah dicoba, dan ilustrasi keren biar langsung paham! πŸš€

Ilustrasi klasik ini nunjukin gimana mass assignment "mengisi massal" field yang seharusnya dilindungi – hacker senang banget!

Kartun hacker lagi eksploitasi mass assignment – jangan ditiru, ini buat belajar aja! πŸ˜‚

Apa Itu Mass Assignment? πŸ€”

Mass Assignment adalah fitur keren di ORM (Object-Relational Mapping) seperti Eloquent di Laravel yang memungkinkan isi banyak field model sekaligus dari array input (misal dari form atau request API).

Contoh normal & berguna:

User::create($request->all());  // Isi semua field dari input
Enter fullscreen mode Exit fullscreen mode

Tapi kalau nggak ada proteksi, semua field di tabel database bisa diisi user – termasuk yang sensitif seperti is_admin, role, balance, dll.

Diagram sederhana ini gambarin proses mass assignment – dari request sampai database keisi data tak terduga!

Contoh 1: Registrasi User Jadi Admin Gratis! πŸ‘‘

Model User tanpa proteksi:

class User extends Model {
    // Kosong! Semua field boleh diisi massal
}
Enter fullscreen mode Exit fullscreen mode

Controller rentan:

public function register(Request $request) {
    User::create($request->all());
    return "Registrasi sukses!";
}
Enter fullscreen mode Exit fullscreen mode

Form normal: name, email, password.

Hacker tambahin di request (pakai Burp Suite atau Postman):

{
    "name": "Hacker",
    "email": "hack@evil.com",
    "password": "123",
    "is_admin": true
}
Enter fullscreen mode Exit fullscreen mode

Boom! User baru langsung jadi admin. Bisa hapus data, ubah apa saja!

Visual in-depth ini nunjukin serangan mass assignment di Laravel – hacker ubah role seenaknya!

Contoh 2: Ubah Role di Update Profile

Controller update rentan:

public function update(Request $request, User $user) {
    $user->update($request->all());
}
Enter fullscreen mode Exit fullscreen mode

Hacker kirim: "role" => "superadmin" β†’ Akun biasa jadi superadmin.

Contoh 3: Kasus Nyata (GitHub 2012)

Dulu Ruby on Rails kena mass assignment, hacker bisa buat akun admin di GitHub. Untung cepet ditambal!

Cara Mencegah Mass Assignment di Laravel (Wajib!) πŸ›‘οΈβœ¨

Laravel punya dua cara keren:

  1. $fillable (Whitelist – Rekomendasi!)
   class User extends Model {
       protected $fillable = ['name', 'email', 'password'];  // Hanya ini boleh diisi massal
   }
Enter fullscreen mode Exit fullscreen mode
  1. $guarded (Blacklist)
   class User extends Model {
       protected $guarded = ['is_admin', 'role'];  // Ini dilarang diisi massal
       // Atau $guarded = []; // Larang semua (paling aman, isi manual)
   }
Enter fullscreen mode Exit fullscreen mode

Ilustrasi fillable vs guarded ini bikin langsung paham perbedaannya – pakai fillable biar aman!

Visual lain yang jelasin proteksi di Laravel – bookmark ya!

Bonus: Best Practices

  • Selalu pakai $fillable atau $guarded.
  • Validasi input terpisah ($request->validate()).
  • Untuk API, cek field manual kalau perlu.
  • Jangan pernah biarin model kosong tanpa proteksi!

Latihan Seru Buat Kamu! πŸ’ͺπŸ”₯

  1. Buat project Laravel sederhana dengan registrasi rentan, test jadi admin pakai Postman.
  2. Tambahin $fillable, test lagi (harusnya gagal!).
  3. Coba update profile dengan field sensitif.
  4. Diskusi: Kenapa mass assignment sering terlupakan pemula?

Selamat praktikum, guys! Mass Assignment ini vulnerability "diam" tapi fatal, tapi dengan $fillable atau $guarded, aplikasi Laravel kamu aman kayak benteng πŸ”₯ Jadi developer yang aware security dari awal! Ingat: Selalu kontrol apa yang boleh diisi massal! Keep coding safely and have fun! πŸŽ‰πŸ”πŸ˜

Top comments (0)