CSRF is in kweade aktiviteit útfierd troch in oanfaller, dy't aksjes útfiert út namme fan in autentike brûker, skealik foar webfeiligens. Gelokkich leveret Laravel de ark om dit soarte fan kwetsberens te foarkommen.
CSRF-oanfallen hijack brûkerssesjes. Se dogge dit troch in brûker te ferrifeljen om in fersyk yn te tsjinjen fia ferburgen formuliertags of kweade URL's (ôfbyldings of keppelings) sûnder de kennis fan 'e brûker.
Dizze oanfal liedt ta in feroaring yn brûker sesje tastân, gegevens lekken, en soms hackers kinne manipulearje ein-brûker gegevens yn in applikaasje.
De ôfbylding hjirboppe yllustrearret in senario wêr't webfeiligens wurdt ynbrutsen. It slachtoffer stjoert in fersyk troch te klikken op in keppeling (ûntfongen), it ferstjoeren fan in fersyk nei in webside-tsjinner dy't effekten sil produsearje dy't winske wurde troch de hacker, dy't yn besit komt fan 'e ynformaasje dy't nuttich is foar tagong en manipulearjen fan' e websideserver.
Te ferbetterjen de feiligens web fan jo applikaasjes, yn elke brûkerssesje, genereart Laravel feilige tokens dy't it brûkt om te soargjen dat de autentike brûker dejinge is dy't de applikaasje freget.
Om't dit token elke kear feroaret as in brûkerssesje wurdt regenerearre, kin in oanfaller gjin tagong krije ta it.
Wannear't d'r in fersyk is om brûkersynformaasje te feroarjen op serverkant (backend) lykas POST
, PUT
, PATCH
e DELETE
, jo moatte de rjochtline opnimme @csrf
yn it oanfraachformulier blade
HTML. De @csrf
it is dus in rjochtline Blade
brûkt om in ferburgen token te generearjen dy't validearre is troch de applikaasje.
De rjochtline Blade
is de syntaksis brûkt binnen de Laravel sjabloan motor neamd Blade . Om in triem te meitsjen blade
jo moatte it in namme jaan - yn ús gefal formulier - folge troch de útwreiding fan it blêd. Dit betsjut dat it bestân de namme sil hawwe form.blade.php
.
De triem wurdt brûkt blade
om werjeften foar brûkers op 'e webside wer te jaan. Der binne in pear foarrjochtlinendefinite of blade shorthand syntaksis dy't jo kinne brûke. Bygelyks, @if
kontrolearje oft in betingst foldien is, @empty
kontrolearje oft de records net leech binne, @auth
kontrolearje oft in brûker is authentisearre en sa fierder.
Mar litte wy weromgean nei de rjochtline @csrf
. Hjir is hoe't jo it brûke:
<form method="POST" action="{{route('pay')}}">
@csrf
</form>
Foarige ferzjes fan Laravel hiene in oare opset: se wurkje beide en dogge itselde ding.
<form method="POST" action="{{route('pay')}}">
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>
As it CSRF-token ûntbrekt yn it yntsjinne formulieroanfraach of as it ûnjildich liket, smyt Laravel in flaterberjocht "Page Expired" mei in 419-statuskoade.
De middelgrutte VerifyCsrfToken
behannelet CSRF-ferifikaasje binnen de Laravel-applikaasje. De middleware
is registrearre yn Kernel.php
en leit yn 'e map app/Http/Middleware
. Dit betsjut dat de middleware
it wurdt aktivearre foar oanfragen binnen it web, net relatearre oan de API's.
protected $middlewareGroups = [
'web' => [
.
.
.
.
.
\App\Http\Middleware\VerifyCsrfToken::class,
],
];
De VerifyCsrfToken-middleware wreidet de klasse út Illuminate\Foundation\Http\Middleware\VerifyCsrfToken
, i.e. CSRF ferifikaasje is definacht binnen de klasse.
Litte wy djipper grave om út te finen hoe't Laravel CSRF-ferifikaasje omgiet.
Binnen de klasse hawwe wy de funksje tokensMatch
.
protected function tokensMatch($request)
{
$token = $this->getTokenFromRequest($request);
return is_string($request->session()->token()) &&
is_string($token) &&
hash_equals($request->session()->token(), $token);
}
yn de koade bepaalt oft de sesje en de ynfier CSRF tokens oerien.
De funksje docht twa dingen:
$this->getTokenFromRequest
it token fan it ynkommende fersyk taheakke fia in ferburgen fjild of de fersykkop. It token wurdt ûntsifere en dan weromjûn nei de tokenfariabele.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;
}
Yn 'e koade wurdt it token fan koptekst
2. Cast sawol it fersyk token as de sesje nei in tekenrige en dan brûke hash_equals
boud yn PHP om te fergelykjen as beide snaren gelyk binne. It resultaat fan dizze operaasje is altyd bool (wier) of (net wier) .
Ercole Palmeri
It ûntwikkeljen fan fynmotoryske feardigens troch kleurjen taret bern op mear komplekse feardigens lykas skriuwen. Kleurje...
De marinesektor is in wiere wrâldwide ekonomyske macht, dy't navigearre is nei in merk fan 150 miljard ...
Ofrûne moandei kundige de Financial Times in deal oan mei OpenAI. FT lisinsje har sjoernalistyk fan wrâldklasse ...
Miljoenen minsken betelje foar streamingtsjinsten, beteljen moanlikse abonnemintskosten. It is gewoane miening dat jo ...