Greinar

Laravel Web Security: Hvað er Cross-Site Request Forgery (CSRF)?

Í þessari Laravel kennslu er talað um veföryggi og hvernig á að vernda vefforrit gegn fölsun á milli vefsvæða eða CSRF árásum.

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.

Hvað er CSRF?

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.

Hvernig á að koma í veg fyrir CSRF beiðnir

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 POSTPUTPATCHDELETE, þú 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.

Nýsköpunarfréttabréf
Ekki missa af mikilvægustu fréttunum um nýsköpun. Skráðu þig til að fá þau með tölvupósti.
<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.

Hvernig og hvar CSRF sannprófunin fer fram

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:

  1. $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

Nýsköpunarfréttabréf
Ekki missa af mikilvægustu fréttunum um nýsköpun. Skráðu þig til að fá þau með tölvupósti.

Nýlegar greinar

Útgefendur og OpenAI skrifa undir samninga um að stjórna flæði upplýsinga sem unnið er með gervigreind

Síðasta mánudag tilkynnti Financial Times um samning við OpenAI. FT leyfir heimsklassa blaðamennsku…

30 Apríl 2024

Greiðslur á netinu: Hér er hvernig streymisþjónusta gerir þér kleift að borga að eilífu

Milljónir manna borga fyrir streymisþjónustu og greiða mánaðarlega áskriftargjöld. Það er almenn skoðun að þú…

29 Apríl 2024

Veeam býður upp á umfangsmesta stuðninginn fyrir lausnarhugbúnað, allt frá vernd til viðbragða og bata

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 ...

23 Apríl 2024

Græn og stafræn bylting: Hvernig forspárviðhald er að umbreyta olíu- og gasiðnaðinum

Forspárviðhald er að gjörbylta olíu- og gasgeiranum, með nýstárlegri og fyrirbyggjandi nálgun við verksmiðjustjórnun.…

22 Apríl 2024