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.
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.
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 POST
, PUT
, PATCH
e DELETE
, 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.
<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.
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:
$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
Operasi ophthalmoplasty nggunakake penampil komersial Apple Vision Pro ditindakake ing Poliklinik Catania…
Ngembangake katrampilan motorik sing apik liwat pewarnaan nyiapake bocah kanggo katrampilan sing luwih rumit kaya nulis. Kanggo mewarnai…
Sektor angkatan laut minangka kekuwatan ekonomi global sing sejatine, sing wis ngarahake pasar 150 milyar ...
Senin kepungkur, Financial Times ngumumake kesepakatan karo OpenAI. FT menehi lisensi jurnalisme kelas donya…