Artikel

Keamanan Web Laravel: Apa Pemalsuan Permintaan Lintas Situs (CSRF)?

Ing tutorial Laravel iki kita ngomong babagan Keamanan Web lan carane nglindhungi aplikasi web saka serangan Cross-Site Request Forgery utawa CSRF.

CSRF minangka kegiatan angkoro sing ditindakake dening panyerang, sing nindakake tumindak atas jenenge pangguna sing wis dikonfirmasi, ngrusak keamanan web. Untunge, Laravel nyedhiyakake alat kanggo nyegah kerentanan jinis iki.

Apa CSRF?

Serangan CSRF mbajak sesi pangguna. Dheweke nindakake iki kanthi ngapusi pangguna supaya ngirim panjaluk liwat tag formulir sing didhelikake utawa URL ala (gambar utawa tautan) tanpa sepengetahuan pangguna.

Serangan iki nyebabake owah-owahan ing negara sesi pangguna, data bocor, lan kadhangkala peretas bisa ngapusi data pangguna pungkasan ing aplikasi.

Gambar ing ndhuwur nggambarake skenario nalika keamanan web dilanggar. Korban ngirim panjalukan kanthi ngeklik link (ditampa), ngirim panjalukan menyang server situs web sing bakal ngasilake efek sing dikarepake dening peretas, sing nduweni informasi sing migunani kanggo ngakses lan manipulasi server situs web.

Carane nyegah panjalukan CSRF

Kanggo nambah keamanan web aplikasi sampeyan, ing saben sesi pangguna, Laravel ngasilake token aman sing digunakake kanggo mesthekake yen pangguna sing wis dikonfirmasi yaiku sing njaluk aplikasi kasebut.

Amarga token iki ganti saben sesi pangguna digawe maneh, panyerang ora bisa ngakses.

Kapan ana panjalukan kanggo ngganti informasi pangguna ing sisih server (backend) kaya POSTPUTPATCHDELETE, sampeyan kudu kalebu arahan @csrf ing formulir panjalukan blade HTML. Ing @csrf mulane dadi direktif Blade digunakake kanggo ngasilake token sing didhelikake sing divalidasi dening aplikasi kasebut.

Direktif Blade yaiku sintaks sing digunakake ing mesin cithakan Laravel sing diarani Blade . Kanggo nggawe file blade sampeyan kudu menehi jeneng - ing wangun kasus kita - ngiring dening extension saka lading. Iki tegese file bakal duwe jeneng form.blade.php.

File digunakake blade kanggo menehi tampilan kanggo pangguna ing kaca web. Ana sawetara pre-directivesdefisintaks singkatan nite utawa blade sing bisa digunakake. Tuladhane, @if priksa manawa ana syarat sing cocog, @empty priksa manawa cathetan ora kosong, @auth priksa manawa pangguna wis dikonfirmasi lan liya-liyane.

Nanging ayo bali menyang arahan @csrf. Mangkene carane sampeyan nggunakake:

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

    @csrf
    
</form>

Versi Laravel sadurunge duwe persiyapan sing beda: loro-lorone bisa lan nindakake perkara sing padha.

newsletter inovasi
Aja kantun warta paling penting babagan inovasi. Mlebu kanggo nampa wong-wong mau liwat email.
<form method="POST" action="{{route('pay')}}">
    
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />
    
</form>

Nalika token CSRF ilang saka panjalukan formulir sing dikirim utawa yen katon ora bener, Laravel mbuwang pesen kesalahan "Kaca Kadaluwarsa" kanthi kode status 419.

Kepiye lan ing ngendi verifikasi CSRF ditindakake

Ing middleware VerifyCsrfToken nangani verifikasi CSRF ing aplikasi Laravel. Ing middleware wis kadhaptar ing Kernel.php lan dumunung ing direktori app/Http/Middleware. Iki tegese ing middleware dipicu kanggo panjalukan ing web, ora ana hubungane karo API.

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

Middleware VerifyCsrfToken ngluwihi kelas Illuminate\Foundation\Http\Middleware\VerifyCsrfToken, yaiku verifikasi CSRF yaiku defiwengi ing kelas.

Ayo digali luwih jero kanggo ngerteni kepiye Laravel nangani verifikasi CSRF.

Ing njero kelas, kita duwe 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);
}

ing kode nemtokake yen sesi lan input CSRF token cocog.

Fungsi kasebut nindakake rong perkara:

  1. njaluk $this->getTokenFromRequest token saka panjalukan mlebu sing dilampirake liwat kolom sing didhelikake utawa header panyuwunan. Token didekripsi banjur bali menyang 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;
}

Ing kode kasebut entuk token saka header

2. Cast loro panjalukan token lan sesi kanggo senar lan banjur nggunakake hash_equals dibangun ing PHP kanggo mbandhingaké yen loro strings padha. Asil saka operasi iki tansah bool (bener) utawa (salah) .

Ercole Palmeri

newsletter inovasi
Aja kantun warta paling penting babagan inovasi. Mlebu kanggo nampa wong-wong mau liwat email.

Artikel anyar

Intervensi inovatif ing Augmented Reality, karo panampil Apple ing Poliklinik Catania

Operasi ophthalmoplasty nggunakake penampil komersial Apple Vision Pro ditindakake ing Poliklinik Catania…

3 May 2024

Keuntungan saka Mewarnai Kaca kanggo Bocah-bocah - jagad sihir kanggo kabeh umur

Ngembangake katrampilan motorik sing apik liwat pewarnaan nyiapake bocah kanggo katrampilan sing luwih rumit kaya nulis. Kanggo mewarnai…

2 May 2024

Masa Depan Iki: Kepiye Industri Pengiriman Revolusi Ekonomi Global

Sektor angkatan laut minangka kekuwatan ekonomi global sing sejatine, sing wis ngarahake pasar 150 milyar ...

1 May 2024

Penerbit lan OpenAI menehi tandha persetujuan kanggo ngatur aliran informasi sing diproses dening Artificial Intelligence

Senin kepungkur, Financial Times ngumumake kesepakatan karo OpenAI. FT menehi lisensi jurnalisme kelas donya…

30 April 2024