CSRF er illgjarn athöfn sem framkvæmt er af árásarmanni, sem framkvæmir aðgerðir fyrir hönd staðfests notanda, sem skaðar veföryggi. Sem betur fer veitir Laravel verkfærin til að koma í veg fyrir þessa tegund af varnarleysi.
CSRF árásir ræna notendalotum. Þetta gera þeir með því að blekkja notanda til að senda inn beiðni með földum formmerkjum eða skaðlegum vefslóðum (myndum eða tenglum) án vitundar notandans.
Þessi árás leiðir til breytinga á notendalotu, gagnaleka og stundum geta tölvusnápur unnið með notendagögn í forriti.
Myndin hér að ofan sýnir atburðarás þar sem veföryggi er brotið. Fórnarlambið sendir beiðni með því að smella á hlekk (móttekið), sendir beiðni til vefþjóns sem mun hafa áhrif sem tölvuþrjóturinn óskar eftir, sem kemst yfir þær upplýsingar sem eru gagnlegar til að fá aðgang að og meðhöndla vefþjóninn.
Til að bæta öryggi vefur forritanna þinna, í hverri notendalotu, býr Laravel til örugga tákn sem það notar til að tryggja að auðkenndur notandi sé sá sem biður um forritið.
Vegna þess að þessi tákn breytist í hvert sinn sem notendalota er endurgerð getur árásarmaður ekki fengið aðgang að því.
Alltaf þegar það er beiðni um að breyta notendaupplýsingum á miðlarahlið (bakenda) eins og POST
, PUT
, PATCH
e DELETE
, þú verður að láta tilskipunina fylgja með @csrf
í beiðnieyðublaðinu blade
HTML. The @csrf
það er því tilskipun Blade
notað til að búa til falið tákn sem er staðfest af forritinu.
Tilskipunin Blade
er setningafræðin sem notuð er innan Laravel sniðmátsvélarinnar sem kallast Blað . Til að búa til skrá blade
þú verður að gefa því nafn - í okkar tilviksformi - fylgt eftir með framlengingu blaðsins. Þetta þýðir að skráin mun hafa nafnið form.blade.php
.
Skráin er notuð blade
til að birta skoðanir fyrir notendur á vefsíðunni. Það eru nokkrar forleiðbeiningardefinite eða blade shorthand setningafræði sem þú getur notað. Til dæmis, @if
athuga hvort skilyrði sé uppfyllt, @empty
athuga hvort skrárnar séu ekki tómar, @auth
athuga hvort notandi sé auðkenndur og svo framvegis.
En snúum okkur aftur að tilskipuninni @csrf
. Svona notarðu það:
<form method="POST" action="{{route('pay')}}">
@csrf
</form>
Fyrri útgáfur af Laravel voru með aðra uppsetningu: þær virka báðar og gera það sama.
<form method="POST" action="{{route('pay')}}">
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>
Þegar CSRF táknið vantar í eyðublaðsbeiðnina sem verið er að senda inn eða ef það virðist ógilt, sendir Laravel villuskilaboðin „Page Expired“ með 419 stöðukóða.
Millibúnaðurinn VerifyCsrfToken
sér um CSRF sannprófun innan Laravel forritsins. The middleware
er skráð í Kernel.php
og er staðsett í skránni app/Http/Middleware
. Þetta þýðir að middleware
það er kveikt fyrir beiðnum innan vefsins, sem tengist ekki API.
protected $middlewareGroups = [
'web' => [
.
.
.
.
.
\App\Http\Middleware\VerifyCsrfToken::class,
],
];
VerifyCsrfToken millihugbúnaðurinn stækkar bekkinn Illuminate\Foundation\Http\Middleware\VerifyCsrfToken
, þ.e. CSRF sannprófun er defikvöld innan bekkjarins.
Við skulum grafa dýpra til að komast að því hvernig Laravel sér um CSRF sannprófun.
Inni í bekknum höfum við fallið tokensMatch
.
protected function tokensMatch($request)
{
$token = $this->getTokenFromRequest($request);
return is_string($request->session()->token()) &&
is_string($token) &&
hash_equals($request->session()->token(), $token);
}
í kóðanum ákvarðar hvort lotan og inntaks CSRF táknin passa saman.
Aðgerðin gerir tvennt:
$this->getTokenFromRequest
táknið frá komandi beiðni sem fylgir í gegnum falinn reit eða beiðnihausinn. Táknið er afkóðað og síðan skilað í táknbreytuna.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;
}
Í kóðanum fær það tákn frá haus
2. Kastaðu bæði beiðnitákninu og lotunni í streng og notaðu síðan hash_equals
innbyggður í PHP til að bera saman ef báðir strengir eru jafnir. Niðurstaðan af þessari aðgerð er alltaf bool (satt) eða (ósatt) .
Ercole Palmeri
Síðasta mánudag tilkynnti Financial Times um samning við OpenAI. FT leyfir heimsklassa blaðamennsku…
Milljónir manna borga fyrir streymisþjónustu og greiða mánaðarlega áskriftargjöld. Það er almenn skoðun að þú…
Coveware frá Veeam mun halda áfram að veita viðbragðsþjónustu fyrir tölvukúgun. Coveware mun bjóða upp á réttar- og úrbótamöguleika ...
Forspárviðhald er að gjörbylta olíu- og gasgeiranum, með nýstárlegri og fyrirbyggjandi nálgun við verksmiðjustjórnun.…