Laravel - Perlindungan CSRF

CSRF mengacu pada serangan Cross Site Forgery pada aplikasi web. Serangan CSRF adalah aktivitas tidak sah yang dilakukan oleh pengguna sistem yang diautentikasi. Karena itu, banyak aplikasi web yang rentan terhadap serangan ini.

Laravel menawarkan perlindungan CSRF dengan cara berikut -

Laravel menyertakan plug-in CSRF built-in, yang menghasilkan token untuk setiap sesi pengguna aktif. Token ini memverifikasi bahwa operasi atau permintaan dikirim oleh pengguna terotentikasi yang bersangkutan.

Penerapan

Penerapan perlindungan CSRF di Laravel dibahas secara rinci di bagian ini. Poin-poin berikut penting sebelum melanjutkan lebih jauh tentang perlindungan CSRF -

  • CSRF diimplementasikan dalam bentuk HTML yang dideklarasikan di dalam aplikasi web. Anda harus menyertakan token CSRF tervalidasi yang tersembunyi dalam formulir, sehingga middleware perlindungan CSRF dari Laravel dapat memvalidasi permintaan tersebut. Sintaksnya ditunjukkan di bawah ini -

<form method = "POST" action="/profile">
   {{ csrf_field() }}
   ...
</form>
  • Anda dapat dengan mudah membangun aplikasi yang digerakkan JavaScript menggunakan pustaka HTTP JavaScript, karena ini termasuk token CSRF ke setiap permintaan keluar.

  • File tersebut yaitu resources/assets/js/bootstrap.js mendaftarkan semua token untuk aplikasi Laravel dan termasuk meta tag yang menyimpan csrf-token dengan Axios HTTP library.

Formulir tanpa token CSRF

Perhatikan baris kode berikut. Mereka menunjukkan bentuk yang mengambil dua parameter sebagai masukan:email dan message.

<form>
   <label> Email </label>
      <input type = "text" name = "email"/>
      <br/>
   <label> Message </label> <input type="text" name = "message"/>
   <input type = ”submit” name = ”submitButton” value = ”submit”>
</form>

Hasil dari kode di atas adalah bentuk yang ditunjukkan di bawah ini yang dapat dilihat oleh pengguna akhir -

Formulir yang ditunjukkan di atas akan menerima informasi masukan apa pun dari pengguna yang berwenang. Ini dapat membuat aplikasi web rentan terhadap berbagai serangan.

Harap dicatat bahwa tombol kirim mencakup fungsionalitas di bagian pengontrol. ItupostContactfungsi digunakan dalam pengontrol untuk tampilan terkait itu. Itu ditunjukkan di bawah ini -

public function postContact(Request $request) {
   return $request-> all();
}

Perhatikan bahwa formulir tidak menyertakan token CSRF sehingga informasi sensitif yang dibagikan sebagai parameter input rentan terhadap berbagai serangan.

Formulir dengan token CSRF

Baris kode berikut menunjukkan kepada Anda formulir yang dirancang ulang menggunakan token CSRF -

<form method = ”post” >
   {{ csrf_field() }}
   <label> Email </label>
   <input type = "text" name = "email"/>
   <br/>
   <label> Message </label>
   <input type = "text" name = "message"/>
   <input type = ”submit” name = ”submitButton” value = ”submit”>
</form>

Output yang dicapai akan mengembalikan JSON dengan token seperti yang diberikan di bawah ini -

{
   "token": "ghfleifxDSUYEW9WE67877CXNVFJKL",
   "name": "TutorialsPoint",
   "email": "[email protected]"
}

Ini adalah token CSRF yang dibuat dengan mengklik tombol kirim.