Ìwé

Aabo wẹẹbu Laravel: Kini Ibeere Ibeere Agbekọja (CSRF)?

Ninu ikẹkọ Laravel yii a sọrọ nipa Aabo wẹẹbu ati bii o ṣe le daabobo ohun elo wẹẹbu kan lati Ibeere Ibeere Agbelebu tabi awọn ikọlu CSRF.

CSRF jẹ iṣẹ irira ti o ṣe nipasẹ ikọlu kan, ti o ṣe awọn iṣe fun aṣoju olumulo kan, ti o bajẹ aabo wẹẹbu. O da, Laravel pese awọn irinṣẹ lati ṣe idiwọ iru ailagbara yii.

Kini CSRF?

CSRF kọlu awọn akoko olumulo jijako. Wọn ṣe eyi nipa tàn olumulo kan lati fi ibeere silẹ nipasẹ awọn aami fọọmu ti o farapamọ tabi awọn URL irira (awọn aworan tabi awọn ọna asopọ) laisi imọ olumulo.

Ikọlu yii nyorisi iyipada ni ipo igba olumulo, jijo data, ati nigba miiran awọn olosa le ṣe afọwọyi data olumulo ipari ninu ohun elo kan.

Aworan ti o wa loke ṣe apejuwe oju iṣẹlẹ kan nibiti aabo wẹẹbu ti ṣẹ. Olufaragba naa firanṣẹ ibeere kan nipa titẹ si ọna asopọ kan (ti o gba), fifiranṣẹ ibeere kan si olupin oju opo wẹẹbu kan eyiti yoo ṣe awọn ipa ti o fẹ nipasẹ agbonaeburuwole, ti o wa sinu ohun-ini alaye ti o wulo fun iwọle ati ifọwọyi olupin oju opo wẹẹbu naa.

Bii o ṣe le ṣe idiwọ awọn ibeere CSRF

Lati mu awọn aabo oju opo wẹẹbu ti awọn ohun elo rẹ, ni igba olumulo kọọkan, Laravel n ṣe awọn ami-ami to ni aabo eyiti o nlo lati rii daju pe olumulo ti o jẹri ni ẹni ti n beere ohun elo naa.

Nitoripe ami yi yipada ni gbogbo igba ti igba olumulo kan ti tun ṣe, ikọlu ko le wọle si.

Nigbakugba ti ibeere ba wa lati yi alaye olumulo pada ni ẹgbẹ olupin (ẹhin) bii POSTPUTPATCHDELETE, o gbọdọ fi ilana naa kun @csrf ninu awọn ìbéèrè fọọmu blade HTML. Awọn @csrf Nitorina o jẹ itọnisọna kan Blade ti a lo lati ṣe ina aami ti o farapamọ ti a fọwọsi nipasẹ ohun elo naa.

Ilana naa Blade jẹ sintasi ti a lo laarin ẹrọ awoṣe Laravel ti a pe Blade . Lati ṣẹda faili kan blade o ni lati fun ni orukọ kan - ni fọọmu ọran wa - atẹle nipa itẹsiwaju ti abẹfẹlẹ. Eyi tumọ si pe faili yoo ni orukọ form.blade.php.

A lo faili naa blade lati ṣe awọn iwo fun awọn olumulo lori oju-iwe wẹẹbu. Awọn itọsọna iṣaaju-meji lo wadefinite tabi abẹfẹlẹ shorthand sintasi o le lo. Fun apere, @if ṣayẹwo ti ipo kan ba ni itẹlọrun, @empty ṣayẹwo ti awọn igbasilẹ ko ba ṣofo, @auth ṣayẹwo ti olumulo kan ba jẹ ifọwọsi ati bẹbẹ lọ.

Ṣugbọn jẹ ki a pada si itọsọna naa @csrf. Eyi ni bi o ṣe nlo:

<form method="POST" action="{{route('pay')}}">

    @csrf
    
</form>

Awọn ẹya iṣaaju ti Laravel ni iṣeto ti o yatọ: awọn mejeeji ṣiṣẹ ati ṣe ohun kanna.

Iwe iroyin Innovation
Maṣe padanu awọn iroyin pataki julọ lori isọdọtun. Forukọsilẹ lati gba wọn nipasẹ imeeli.
<form method="POST" action="{{route('pay')}}">
    
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />
    
</form>

Nigbati ami CSRF ba sonu lati ibeere fọọmu ti a fi silẹ tabi ti o ba han pe ko wulo, Laravel ju ifiranṣẹ aṣiṣe “Opin Oju-iwe” kan pẹlu koodu ipo 419 kan.

Bawo ati ibi ti ijẹrisi CSRF ti waye

Awọn middleware VerifyCsrfToken n kapa ijerisi CSRF laarin ohun elo Laravel. Awọn middleware ti forukọsilẹ ni Kernel.php ati ki o ti wa ni be ni liana app/Http/Middleware. Eleyi tumo si wipe awọn middleware o jẹ okunfa fun awọn ibeere laarin oju opo wẹẹbu, ko ni ibatan si awọn API.

protected $middlewareGroups = [
        'web' => [
           .
           .
           .
           .
           .
            \App\Http\Middleware\VerifyCsrfToken::class,
        ],
    ];

VerifyCsrfToken middleware fa kilaasi naa gbooro Illuminate\Foundation\Http\Middleware\VerifyCsrfToken, ie CSRF ijerisi ni definite laarin kilasi.

Jẹ ki a ma wà jinle lati wa bawo ni Laravel ṣe n kapa ijẹrisi CSRF.

Ninu kilasi, a ni iṣẹ naa tokensMatch.

protected function tokensMatch($request)
{
     $token = $this->getTokenFromRequest($request);

     return is_string($request->session()->token()) &&
            is_string($token) &&
            hash_equals($request->session()->token(), $token);
}

ninu koodu pinnu boya igba ati awọn ami CSRF igbewọle baramu.

Iṣẹ naa ṣe awọn nkan meji:

  1. gba $this->getTokenFromRequest ami lati ibeere ti nwọle ti a so nipasẹ aaye ti o farapamọ tabi akọsori ibeere. Àmi ti wa ni decrypted ati ki o si pada si awọn àmi ayípadà.
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;
}

Ninu koodu ti o gba àmi lati akọsori

2. Sọ mejeeji aami ibeere ati igba si okun kan lẹhinna lo hash_equals ti a ṣe sinu PHP lati ṣe afiwe ti awọn okun mejeeji ba dọgba. Abajade ti isẹ yii jẹ nigbagbogbo bool (otitọ) tabi (eke) .

Ercole Palmeri

Iwe iroyin Innovation
Maṣe padanu awọn iroyin pataki julọ lori isọdọtun. Forukọsilẹ lati gba wọn nipasẹ imeeli.

Awọn iwe ti o ṣẹṣẹ

Awọn olutẹwe ati OpenAI fowo si awọn adehun lati ṣe ilana ṣiṣan ti alaye ti a ṣe ilana nipasẹ Imọran Artificial

Ni ọjọ Aarọ to kọja, Awọn akoko Iṣowo kede adehun kan pẹlu OpenAI. FT ṣe iwe-aṣẹ iwe-akọọlẹ agbaye rẹ…

30 Kẹrin 2024

Awọn sisanwo ori ayelujara: Eyi ni Bii Awọn iṣẹ ṣiṣanwọle jẹ ki o sanwo lailai

Awọn miliọnu eniyan sanwo fun awọn iṣẹ ṣiṣanwọle, san awọn idiyele ṣiṣe alabapin oṣooṣu. O jẹ ero ti o wọpọ pe o…

29 Kẹrin 2024

Veeam ṣe ẹya atilẹyin okeerẹ julọ fun ransomware, lati aabo si esi ati imularada

Coveware nipasẹ Veeam yoo tẹsiwaju lati pese awọn iṣẹ esi iṣẹlẹ ikọlu cyber. Coveware yoo funni ni awọn oniwadi ati awọn agbara atunṣe…

23 Kẹrin 2024

Alawọ ewe ati Iyika oni-nọmba: Bawo ni Itọju Asọtẹlẹ ti n Yipada Ile-iṣẹ Epo & Gaasi

Itọju isọtẹlẹ jẹ iyipada ti eka epo & gaasi, pẹlu imotuntun ati ọna imudani si iṣakoso ọgbin.…

22 Kẹrin 2024