CSRF je zlonamjerna aktivnost koju izvodi napadač, koji izvodi radnje u ime autentificiranog korisnika, štetne za web sigurnost. Na sreću, Laravel pruža alate za sprečavanje ove vrste ranjivosti.
CSRF napadi otimaju korisničke sesije. Oni to rade tako što prevare korisnika da podnese zahtjev putem skrivenih oznaka obrasca ili zlonamjernih URL-ova (slika ili linkova) bez znanja korisnika.
Ovaj napad dovodi do promjene stanja korisničke sesije, curenja podataka, a ponekad hakeri mogu manipulirati podacima krajnjeg korisnika u aplikaciji.
Slika iznad ilustruje scenario u kojem je probijena web sigurnost. Žrtva šalje zahtjev klikom na link (primljeno), šaljući zahtjev serveru web stranice koji će proizvesti željene efekte hakera koji dolazi u posjed informacija korisnih za pristup i manipulaciju serverom web stranice.
Za poboljšanje bezbjednost web vaših aplikacija, u svakoj korisničkoj sesiji, Laravel generiše sigurne tokene koje koristi kako bi osigurao da je autentificirani korisnik taj koji traži aplikaciju.
Budući da se ovaj token mijenja svaki put kada se korisnička sesija ponovo generiše, napadač mu ne može pristupiti.
Kad god postoji zahtjev za promjenom korisničkih informacija na strani servera (backend) kao POST
, PUT
, PATCH
e DELETE
, morate uključiti direktivu @csrf
u obrascu zahtjeva blade
HTML. The @csrf
to je stoga direktiva Blade
koristi se za generiranje skrivenog tokena potvrđenog od strane aplikacije.
Direktiva Blade
je sintaksa koja se koristi unutar Laravel predložaka pod nazivom oštrica . Za kreiranje datoteke blade
morate mu dati ime – u našem obliku u obliku – nakon čega slijedi produžetak oštrice. To znači da će datoteka imati ime form.blade.php
.
Datoteka se koristi blade
za prikazivanje prikaza za korisnike na web stranici.Postoji nekoliko preduputstavadefisintaksu stenograma nite ili blade koju možete koristiti. Na primjer, @if
provjeriti da li je uvjet ispunjen, @empty
provjerite da li evidencija nije prazna, @auth
provjeriti da li je korisnik autentificiran i tako dalje.
No, vratimo se na direktivu @csrf
. Evo kako ga koristite:
<form method="POST" action="{{route('pay')}}">
@csrf
</form>
Prethodne verzije Laravela imale su drugačiju postavku: obje rade i rade istu stvar.
<form method="POST" action="{{route('pay')}}">
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>
Kada CSRF token nedostaje u zahtjevu obrasca koji se šalje ili ako se čini nevažećim, Laravel šalje poruku o grešci „Stranica je istekla“ sa statusnim kodom 419.
Middleware VerifyCsrfToken
rukuje CSRF verifikacijom unutar Laravel aplikacije. The middleware
je registrovan u Kernel.php
i nalazi se u imeniku app/Http/Middleware
. To znači da je middleware
pokreće se za zahtjeve unutar weba, koji nisu povezani s API-jima.
protected $middlewareGroups = [
'web' => [
.
.
.
.
.
\App\Http\Middleware\VerifyCsrfToken::class,
],
];
Međuoprema VerifyCsrfToken proširuje klasu Illuminate\Foundation\Http\Middleware\VerifyCsrfToken
, tj. CSRF verifikacija je defikonačno unutar klase.
Hajde da kopamo dublje da saznamo kako Laravel rukuje CSRF verifikacijom.
Unutar klase imamo funkciju tokensMatch
.
protected function tokensMatch($request)
{
$token = $this->getTokenFromRequest($request);
return is_string($request->session()->token()) &&
is_string($token) &&
hash_equals($request->session()->token(), $token);
}
u kodu određuje da li se sesija i ulazni CSRF tokeni poklapaju.
Funkcija radi dvije stvari:
$this->getTokenFromRequest
token iz dolaznog zahtjeva priložen preko skrivenog polja ili zaglavlja zahtjeva. Token se dešifruje i zatim vraća u varijablu tokena.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;
}
U kodu dobija token iz zaglavlja
2. Prebacite i token zahtjeva i sesiju u niz i zatim koristite hash_equals
ugrađen u PHP za poređenje ako su oba niza jednaka. Rezultat ove operacije je uvijek bool (tačno) ili (netačno) .
Ercole Palmeri
Coveware od strane Veeam-a će nastaviti da pruža usluge odgovora na incidente u slučaju sajber iznude. Coveware će ponuditi mogućnosti forenzike i sanacije…
Prediktivno održavanje revolucionira sektor nafte i plina, s inovativnim i proaktivnim pristupom upravljanju postrojenjima.…
UK CMA izdao je upozorenje o ponašanju Big Tech-a na tržištu umjetne inteligencije. Tamo…
Uredba o „zelenim kućama“, koju je formulisala Evropska unija za poboljšanje energetske efikasnosti zgrada, završila je svoj zakonodavni proces sa…