Artiklid

Laraveli veebiturvalisus: mis on saidiülene päringu võltsimine (CSRF)?

Selles Laraveli õpetuses räägime veebiturbest ja sellest, kuidas kaitsta veebirakendust Cross-Site Request Forgery või CSRF rünnakute eest.

CSRF on pahatahtlik tegevus, mida teostab ründaja, kes teeb autentitud kasutaja nimel toiminguid, mis kahjustavad veebiturvalisust. Õnneks pakub Laravel tööriistu seda tüüpi haavatavuse vältimiseks.

Mis on CSRF?

CSRF ründab kaaperdada kasutajaseansse. Nad teevad seda, meelitades kasutajat esitama taotlust peidetud vormimärgendite või pahatahtlike URL-ide (piltide või linkide) kaudu ilma kasutaja teadmata.

See rünnak viib kasutaja seansi oleku muutumiseni, andmete lekkimiseni ja mõnikord võivad häkkerid rakenduses lõppkasutaja andmeid manipuleerida.

Ülaltoodud pilt illustreerib stsenaariumi, kus veebiturvalisust rikutakse. Ohver saadab päringu, klõpsates lingil (saadud), saates päringu veebisaidiserverisse, mis toob kaasa häkkeri soovitud efektid, kelle valdusse jõuab veebisaidi serverile juurdepääsuks ja sellega manipuleerimiseks kasulik teave.

Kuidas vältida CSRF-i päringuid

Et parandada turvalisus Teie rakenduste veebis, genereerib Laravel igal kasutajaseansil turvalised märgid, mida ta kasutab tagamaks, et autentitud kasutaja on see, kes rakendust taotleb.

Kuna see tunnus muutub iga kord, kui kasutaja seanss uuesti luuakse, ei pääse ründaja sellele juurde.

Kui on taotlus muuta kasutajateavet serveri poolel (taustaprogrammis), näiteks POSTPUTPATCHDELETE, peate käskkirja lisama @csrf taotlusvormis blade HTML. The @csrf seega on tegemist direktiiviga Blade mida kasutatakse rakenduse poolt kinnitatud peidetud märgi genereerimiseks.

Direktiiv Blade on Laraveli mallimootoris kasutatav süntaks tera . Faili loomiseks blade peate andma sellele nime – meie puhul –, millele järgneb tera pikendus. See tähendab, et failil on nimi form.blade.php.

Faili kasutatakse blade kasutajatele veebilehel vaadete renderdamiseks. On paar eeljuhistdefinite või blade stenogrammi süntaksit, mida saate kasutada. Näiteks, @if kontrollige, kas tingimus on täidetud, @empty kontrollige, kas kirjed pole tühjad, @auth kontrollige, kas kasutaja on autentitud ja nii edasi.

Aga tuleme tagasi direktiivi juurde @csrf. Kasutage seda järgmiselt.

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

    @csrf
    
</form>

Laraveli varasematel versioonidel oli erinev seadistus: mõlemad töötavad ja teevad sama asja.

Innovatsiooni uudiskiri
Ärge jätke ilma kõige olulisematest uuendustest. Registreeruge, et saada neid meili teel.
<form method="POST" action="{{route('pay')}}">
    
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />
    
</form>

Kui esitatavast vormitaotlusest puudub CSRF-i luba või see näib olevat kehtetu, saadab Laravel tõrketeate „Lehekülg aegunud” olekukoodiga 419.

Kuidas ja kus CSRF-i kontrollimine toimub

Vahevara VerifyCsrfToken tegeleb CSRF-i kontrollimisega Laraveli rakenduses. The middleware on registreeritud Kernel.php ja asub kataloogis app/Http/Middleware. See tähendab, et middleware see käivitatakse veebisiseste päringute puhul, mis pole API-dega seotud.

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

VerifyCsrfToken vahevara laiendab klassi Illuminate\Foundation\Http\Middleware\VerifyCsrfToken, st CSRF-i kinnitamine on defiklassi sees.

Uurime sügavamalt, kuidas Laravel CSRF-i kinnitamist käsitleb.

Klassi sees on meil funktsioon tokensMatch.

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

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

koodis määrab, kas seansi ja sisend-CSRF-märgid kattuvad.

Funktsioon teeb kahte asja:

  1. saada $this->getTokenFromRequest peidetud välja või päringu päise kaudu lisatud sissetuleva päringu luba. Token dekrüpteeritakse ja seejärel tagastatakse token muutuja juurde.
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;
}

Koodis saab see päisest märgi

2. Kandke nii päringumärk kui ka seanss stringi ja seejärel kasutage hash_equals sisseehitatud PHP-sse, et võrrelda, kas mõlemad stringid on võrdsed. Selle toimingu tulemus on alati bool (tõene) või (vale) .

Ercole Palmeri

Innovatsiooni uudiskiri
Ärge jätke ilma kõige olulisematest uuendustest. Registreeruge, et saada neid meili teel.

Viimased artiklid

Veeam pakub lunavarale kõige põhjalikumat tuge alates kaitsest kuni reageerimise ja taastamiseni

Veeami Coveware jätkab küberväljapressimise juhtumitele reageerimise teenuste pakkumist. Coveware pakub kohtuekspertiisi ja heastamisvõimalusi…

Aprill 23 2024

Roheline ja digitaalne revolutsioon: kuidas ennustav hooldus muudab nafta- ja gaasitööstust

Ennustav hooldus muudab nafta- ja gaasisektori pöördeliseks uuendusliku ja ennetava lähenemisega tehaste juhtimisele.…

Aprill 22 2024

Ühendkuningriigi monopolivastane regulaator tõstab BigTechi häire GenAI pärast

Ühendkuningriigi CMA on väljastanud hoiatuse Big Techi käitumise kohta tehisintellekti turul. Seal…

Aprill 18 2024

Casa Green: energiarevolutsioon jätkusuutliku tuleviku nimel Itaalias

Euroopa Liidu poolt hoonete energiatõhususe suurendamiseks koostatud roheliste majade dekreet on lõpetanud oma seadusandliku protsessi…

Aprill 18 2024