Artikel

Keamanan Web Laravel: Apa itu Cross-Site Request Forgery (CSRF)?

Dalam tutorial Laravel ini kita berbicara tentang Keamanan Web dan bagaimana melindungi aplikasi web dari Pemalsuan Permintaan Lintas Situs atau serangan CSRF.

CSRF adalah aktivitas jahat yang dilakukan oleh penyerang, yang melakukan tindakan atas nama pengguna yang diautentikasi, yang merugikan keamanan web. Untungnya, Laravel menyediakan alat untuk mencegah jenis kerentanan ini.

Apa itu CSRF?

Serangan CSRF membajak sesi pengguna. Mereka melakukan ini dengan menipu pengguna agar mengirimkan permintaan melalui tag formulir tersembunyi atau URL jahat (gambar atau tautan) tanpa sepengetahuan pengguna.

Serangan ini menyebabkan perubahan status sesi pengguna, kebocoran data, dan terkadang peretas dapat memanipulasi data pengguna akhir dalam suatu aplikasi.

Gambar di atas mengilustrasikan skenario di mana keamanan web dilanggar. Korban mengirimkan permintaan dengan mengklik tautan (diterima), mengirimkan permintaan ke server situs web yang akan menghasilkan efek yang diinginkan oleh peretas, yang memiliki informasi yang berguna untuk mengakses dan memanipulasi server situs web.

Bagaimana mencegah permintaan CSRF

Untuk meningkatkan keamanan web aplikasi Anda, di setiap sesi pengguna, Laravel menghasilkan token aman yang digunakannya untuk memastikan bahwa pengguna yang diautentikasi adalah yang meminta aplikasi tersebut.

Karena token ini berubah setiap kali sesi pengguna dibuat ulang, penyerang tidak dapat mengaksesnya.

Setiap kali ada permintaan untuk mengubah informasi pengguna di sisi server (backend) seperti POSTPUTPATCHDELETE, Anda harus menyertakan arahan @csrf dalam formulir permintaan blade HTML. Itu @csrf karena itu merupakan arahan Blade digunakan untuk menghasilkan token tersembunyi yang divalidasi oleh aplikasi.

Direktif Blade adalah sintaks yang digunakan dalam mesin template Laravel yang disebut Mata pisau . Untuk membuat file blade Anda harus memberinya nama – dalam bentuk kasus kami – diikuti dengan perpanjangan mata pisau. Ini berarti bahwa file tersebut akan memiliki nama form.blade.php.

Filenya digunakan blade untuk merender tampilan bagi pengguna di halaman web Ada beberapa pra-arahandefisintaks steno nite atau blade yang dapat Anda gunakan. Misalnya, @if periksa apakah suatu kondisi terpenuhi, @empty periksa apakah catatan tidak kosong, @auth periksa apakah pengguna diautentikasi dan sebagainya.

Tapi mari kita kembali ke arahan @csrf. Inilah cara Anda menggunakannya:

<form method="POST" action="{{route('pay')}}">

    @csrf
    
</form>

Laravel versi sebelumnya memiliki pengaturan yang berbeda: keduanya berfungsi dan melakukan hal yang sama.

Buletin inovasi
Jangan lewatkan berita terpenting tentang inovasi. Daftar untuk menerimanya melalui email.
<form method="POST" action="{{route('pay')}}">
    
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />
    
</form>

Saat token CSRF hilang dari permintaan formulir yang dikirimkan atau jika tampaknya tidak valid, Laravel melempar pesan kesalahan "Halaman Kedaluwarsa" dengan kode status 419.

Bagaimana dan di mana verifikasi CSRF dilakukan

Alat tengah VerifyCsrfToken menangani verifikasi CSRF dalam aplikasi Laravel. Itu middleware terdaftar di Kernel.php dan terletak di direktori app/Http/Middleware. Ini berarti bahwa middleware itu dipicu untuk permintaan di dalam web, tidak terkait dengan API.

protected $middlewareGroups = [
        'web' => [
           .
           .
           .
           .
           .
            \App\Http\Middleware\VerifyCsrfToken::class,
        ],
    ];

Middleware VerifyCsrfToken memperluas kelas Illuminate\Foundation\Http\Middleware\VerifyCsrfToken, yaitu verifikasi CSRF adalah defimalam di dalam kelas.

Mari gali lebih dalam untuk mengetahui bagaimana Laravel menangani verifikasi CSRF.

Di dalam kelas, kita memiliki fungsi tokensMatch.

protected function tokensMatch($request)
{
     $token = $this->getTokenFromRequest($request);

     return is_string($request->session()->token()) &&
            is_string($token) &&
            hash_equals($request->session()->token(), $token);
}

dalam kode menentukan apakah sesi dan input token CSRF cocok.

Fungsi melakukan dua hal:

  1. mendapatkan $this->getTokenFromRequest token dari permintaan masuk yang dilampirkan melalui bidang tersembunyi atau header permintaan. Token didekripsi dan kemudian dikembalikan ke variabel token.
protected function getTokenFromRequest($request)
{
    $token = $request->input('_token') ?: $request->header('X-CSRF-TOKEN');

    if (! $token && $header = $request->header('X-XSRF-TOKEN')) {
        try {
            $token = CookieValuePrefix::remove($this->encrypter->decrypt($header, static::serialized()));
        } catch (DecryptException $e) {
            $token = '';
            }
    }

    return $token;
}

Dalam kode itu mendapat token dari header

2. Keluarkan token permintaan dan sesi ke string lalu gunakan hash_equals dibangun di PHP untuk membandingkan jika kedua string sama. Hasil operasi ini selalu bool (benar) atau (salah) .

Ercole Palmeri

Buletin inovasi
Jangan lewatkan berita terpenting tentang inovasi. Daftar untuk menerimanya melalui email.

Artikel Terbaru

Intervensi inovatif dalam Augmented Reality, dengan penampil Apple di Poliklinik Catania

Operasi oftalmoplasti menggunakan penampil komersial Apple Vision Pro dilakukan di Poliklinik Catania…

3 Mei 2024

Manfaat Halaman Mewarnai untuk Anak - dunia keajaiban untuk segala usia

Mengembangkan keterampilan motorik halus melalui mewarnai mempersiapkan anak untuk keterampilan yang lebih kompleks seperti menulis. Mewarnai…

2 Mei 2024

Masa Depan Ada di Sini: Bagaimana Industri Perkapalan Merevolusi Perekonomian Global

Sektor angkatan laut adalah kekuatan ekonomi global sejati, yang telah menuju pasar 150 miliar...

1 Mei 2024

Penerbit dan OpenAI menandatangani perjanjian untuk mengatur aliran informasi yang diproses oleh Kecerdasan Buatan

Senin lalu, Financial Times mengumumkan kesepakatan dengan OpenAI. FT melisensikan jurnalisme kelas dunianya…

April 30 2024