Apa itu laravel
Laravel adalah salah satu framework PHP yang paling populer untuk pengembangan aplikasi web. Salah satu fitur yang sangat berguna dari Laravel adalah model Eloquent, yang memudahkan kita untuk berinteraksi dengan basis data menggunakan objek-objek PHP.
Namun, penggunaan model Eloquent dalam skenario tertentu dapat menyebabkan potensi masalah keamanan jika tidak diimplementasikan dengan benar. Salah satu masalah keamanan yang umum adalah “Mass Assignment Vulnerability” atau kerentanannya pada “mass assignment.”
Dan kali ini, kita akan membahas tentang potensi permasalahan “Mass Assignment” pada model Eloquent di Laravel dan bagaimana cara mengatasi masalah tersebut untuk memastikan keamanan aplikasi kita.
Apa itu Mass Assignment?
Sebelum kita membahas masalahnya, mari kita pahami apa yang dimaksud dengan “Mass Assignment.” Mass Assignment adalah cara untuk menyimpan banyak data sekaligus ke dalam database menggunakan array atau objek. Dalam konteks Laravel, ini sering digunakan dalam kombinasi dengan metode create, update, atau fill pada model Eloquent.
Masalah Mass Assignment pada Laravel :
Masalah terjadi ketika kita memungkinkan semua kolom dalam tabel database diisi secara massal tanpa pengawasan. Jika tidak diatur dengan benar, ini bisa menyebabkan data sensitif atau kolom yang tidak seharusnya diubah oleh pengguna akhir dapat diakses dan dimodifikasi melalui request HTTP.
Contoh :
Misalkan kita memiliki model Eloquent “Warga” dengan tiga kolom: “nama,” “umur,” dan “alamat.” Jika kita tidak menetapkan properti $fillable atau $guarded pada model tersebut, maka semua kolom diizinkan untuk diisi secara massal.
namespace App\Models; use Illuminate\Database\Eloquent\Model; class Warga extends Model { // Tidak ada properti $fillable atau $guarded }
Jika kode berikut digunakan :
Warga::create($request->except([‘_token’,’submit’]));
Maka seluruh data yang ada dalam $request akan disimpan ke dalam model “Warga,” termasuk data yang tidak diinginkan atau data sensitif seperti “password” atau “role” (jika ada). Hal ini dapat menyebabkan potensi masalah keamanan pada aplikasi Anda.
Solusi:
Menggunakan $fillable atau $guarded
Untuk mengatasi masalah potensial ini, kita perlu menetapkan properti $fillable atau $guarded pada model Eloquent kita.
1.Menggunakan $fillable :
Dalam properti $fillable, Anda harus secara eksplisit menentukan kolom mana yang diizinkan untuk diisi secara massal. Contoh implementasi:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Warga extends Model
{ protected $fillable = ['nama', 'umur', 'alamat']; }
Dengan cara ini, hanya kolom “nama,” “umur,” dan “alamat” yang diizinkan untuk diisi secara massal.
2.Menggunakan $guarded :
Jika Anda ingin mengizinkan semua kolom kecuali yang dijelaskan dalam array tersebut, Anda dapat menggunakan $guarded. Contoh implementasi :
namespace App\Models; use Illuminate\Database\Eloquent\Model; class Warga extends Model { protected $guarded = []; }
Kode di atas mengizinkan seluruh kolom di tabel “warga” untuk diisi secara massal.
Penanganan Data yang Tidak Diinginkan :
Selain itu, pastikan untuk melakukan validasi data yang masuk sebelum menyimpannya ke dalam database. Anda dapat menggunakan fitur validasi bawaan Laravel untuk memastikan data yang Anda simpan adalah data yang sah dan valid.
Contoh validasi untuk model “Warga” :
$request->validate([ 'nama' => 'required|string|max:255', 'umur' => 'required|integer|min:0', 'alamat' => 'required|string|max:255', ]);
Kesimpulan :
Menggunakan model Eloquent Laravel dengan bijaksana adalah kunci untuk menghindari potensi masalah keamanan seperti Mass Assignment Vulnerability. Dengan menentukan properti $fillable atau $guarded secara tepat dan melakukan validasi data yang masuk, Anda dapat memastikan data yang Anda simpan adalah data yang valid dan mengurangi risiko celah keamanan dalam aplikasi Anda. Selalu prioritaskan keamanan saat membangun aplikasi web menggunakan Laravel atau framework lainnya.
Artikel Lainnya :
0 Comments