Artikkelit

Laravel Web Security: Mikä on Cross-Site Request Forgery (CSRF)?

Tässä Laravel-opetusohjelmassa puhumme verkkoturvallisuudesta ja verkkosovelluksen suojaamisesta Cross-Site Request Forgery- tai CSRF-hyökkäyksiltä.

CSRF on haitallista toimintaa, jonka suorittaa hyökkääjä, joka suorittaa toimintoja todetun käyttäjän puolesta, mikä vahingoittaa verkkoturvallisuutta. Onneksi Laravel tarjoaa työkalut tämän tyyppisten haavoittuvuuksien estämiseen.

Mikä on CSRF?

CSRF hyökkää kaappaamaan käyttäjien istuntoja. He tekevät tämän huijaamalla käyttäjän lähettämään pyynnön piilotettujen lomaketunnisteiden tai haitallisten URL-osoitteiden (kuvien tai linkkien) kautta käyttäjän tietämättä.

Tämä hyökkäys johtaa muutokseen käyttäjän istunnon tilassa, tietovuotoon, ja joskus hakkerit voivat manipuloida loppukäyttäjän tietoja sovelluksessa.

Yllä oleva kuva havainnollistaa tilannetta, jossa verkkoturvallisuus rikotaan. Uhri lähettää pyynnön napsauttamalla linkkiä (vastaanotettu) ja lähettää pyynnön verkkosivuston palvelimelle, joka tuottaa hakkerin toivomia vaikutuksia, kun hän saa haltuunsa verkkosivustopalvelimelle pääsyä ja sen manipulointia varten hyödyllisiä tietoja.

Kuinka estää CSRF-pyynnöt

Parantaaksesi turvallisuus sovellustesi verkkoon, Laravel luo jokaisessa käyttäjäistunnossa suojattuja tunnuksia, joita se käyttää varmistaakseen, että todennettu käyttäjä on se, joka pyytää sovellusta.

Koska tämä tunnus muuttuu aina, kun käyttäjän istunto luodaan uudelleen, hyökkääjä ei voi käyttää sitä.

Aina kun on pyyntö muuttaa käyttäjätietoja palvelimen puolella (backend), kuten POSTPUTPATCHDELETE, sinun on sisällytettävä direktiivi @csrf pyyntölomakkeessa blade HTML. The @csrf se on siis direktiivi Blade käytetään sovelluksen vahvistaman piilotetun tunnuksen luomiseen.

Direktiivi Blade on syntaksi, jota käytetään Laravel-mallimoottorissa nimeltä Terä . Luodaksesi tiedoston blade sinun on annettava sille nimi – meidän tapauksessamme – ja sen jälkeen terän jatke. Tämä tarkoittaa, että tiedostolla on nimi form.blade.php.

Tiedostoa käytetään blade näkymää käyttäjille verkkosivulla. On olemassa muutamia esiohjeitadefinite- tai blade shorthand -syntaksia, jota voit käyttää. Esimerkiksi, @if tarkista, täyttyykö ehto, @empty tarkista, etteivät tietueet ole tyhjiä, @auth tarkista onko käyttäjä todennettu ja niin edelleen.

Mutta palataanpa direktiiviin @csrf. Näin käytät sitä:

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

    @csrf
    
</form>

Laravelin aiemmissa versioissa oli erilainen kokoonpano: ne molemmat toimivat ja tekevät saman asian.

Innovaatio-uutiskirje
Älä missaa tärkeimpiä innovaatioita koskevia uutisia. Rekisteröidy saadaksesi ne sähköpostitse.
<form method="POST" action="{{route('pay')}}">
    
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />
    
</form>

Kun CSRF-tunnus puuttuu lähetettävästä lomakepyynnöstä tai jos se näyttää virheelliseltä, Laravel lähettää "Sivu vanhentunut" -virhesanoman, jossa on tilakoodi 419.

Miten ja missä CSRF-vahvistus tapahtuu

Väliohjelmisto VerifyCsrfToken käsittelee CSRF-vahvistuksen Laravel-sovelluksessa. The middleware on rekisteröity Kernel.php ja sijaitsee hakemistossa app/Http/Middleware. Tämä tarkoittaa, että middleware se käynnistetään verkon sisäisille pyynnöille, jotka eivät liity API:ihin.

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

VerifyCsrfToken-väliohjelmisto laajentaa luokkaa Illuminate\Foundation\Http\Middleware\VerifyCsrfToken, eli CSRF-varmennus on defiillalla luokassa.

Kaivataanpa syvemmälle, kuinka Laravel käsittelee CSRF-todennusta.

Luokan sisällä meillä on toiminto tokensMatch.

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

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

koodissa määrittää, täsmäävätkö istunto ja syötetyt CSRF-tunnukset.

Toiminto tekee kaksi asiaa:

  1. saada $this->getTokenFromRequest saapuvan pyynnön tunniste, joka on liitetty piilokentän tai pyynnön otsikon kautta. Tokenin salaus puretaan ja palautetaan sitten tunnusmuuttujaan.
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;
}

Koodissa se saa tokenin otsikosta

2. Suoratoista sekä pyyntötunnus että istunto merkkijonoon ja käytä sitten hash_equals sisäänrakennettu PHP vertaamaan, ovatko molemmat merkkijonot samat. Tämän toimenpiteen tulos on aina bool (tosi) tai (epätosi) .

Ercole Palmeri

Innovaatio-uutiskirje
Älä missaa tärkeimpiä innovaatioita koskevia uutisia. Rekisteröidy saadaksesi ne sähköpostitse.

Viimeaikaiset artikkelit

Veeam tarjoaa kattavimman tuen kiristysohjelmille suojauksesta vastaukseen ja palautukseen

Veeamin Coveware tarjoaa jatkossakin kyberkiristystapahtumien reagointipalveluita. Coveware tarjoaa rikosteknisiä ja korjaavia ominaisuuksia…

Huhtikuu 23 2024

Vihreä ja digitaalinen vallankumous: Kuinka ennakoiva huolto muuttaa öljy- ja kaasuteollisuutta

Ennakoiva huolto mullistaa öljy- ja kaasualan innovatiivisella ja ennakoivalla lähestymistavalla laitosten hallintaan.…

Huhtikuu 22 2024

Ison-Britannian kilpailuviranomainen herättää BigTech-hälytyksen GenAI:sta

Britannian CMA on antanut varoituksen Big Techin käyttäytymisestä tekoälymarkkinoilla. Siellä…

Huhtikuu 18 2024

Casa Green: energiavallankumous kestävän tulevaisuuden puolesta Italiassa

Euroopan unionin rakennusten energiatehokkuuden parantamiseksi laatima "Green Houses" -asetus on saanut lainsäädäntöprosessinsa päätökseen…

Huhtikuu 18 2024