Artikelen

Laravel Web Security: wat is Cross-Site Request Forgery (CSRF)?

In deze Laravel-tutorial praten we over webbeveiliging en hoe je een webtoepassing kunt beschermen tegen Cross-Site Request Forgery of CSRF-aanvallen.

CSRF is een kwaadaardige activiteit die wordt uitgevoerd door een aanvaller, die acties uitvoert namens een geverifieerde gebruiker, die schadelijk is voor de webbeveiliging. Gelukkig biedt Laravel de tools om dit type kwetsbaarheid te voorkomen.

Wat is CSRF?

CSRF-aanvallen kapen gebruikerssessies. Ze doen dit door een gebruiker te misleiden om een ​​verzoek in te dienen via verborgen formuliertags of kwaadaardige URL's (afbeeldingen of links) zonder medeweten van de gebruiker.

Deze aanval leidt tot een verandering in de status van de gebruikerssessie, datalekken en soms kunnen hackers eindgebruikersgegevens in een applicatie manipuleren.

De afbeelding hierboven illustreert een scenario waarin de webbeveiliging wordt geschonden. Het slachtoffer verzendt een verzoek door op een link te klikken (ontvangen), en stuurt een verzoek naar een websiteserver die de gewenste effecten zal produceren door de hacker, die in het bezit komt van de informatie die nuttig is voor toegang tot en manipulatie van de websiteserver.

Hoe CSRF-verzoeken te voorkomen

Om te verbeteren veiligheid web van uw applicaties genereert Laravel in elke gebruikerssessie beveiligde tokens die het gebruikt om ervoor te zorgen dat de geverifieerde gebruiker degene is die de applicatie aanvraagt.

Omdat dit token telkens verandert wanneer een gebruikerssessie opnieuw wordt gegenereerd, heeft een aanvaller er geen toegang toe.

Wanneer er een verzoek is om gebruikersinformatie aan de serverzijde (backend) te wijzigen, zoals POSTPUTPATCHDELETE, moet u de richtlijn opnemen @csrf in het aanvraagformulier blade HTML. De @csrf het is dus een richtlijn Blade gebruikt om een ​​verborgen token te genereren dat door de toepassing is gevalideerd.

De richtlijn Blade is de syntaxis die wordt gebruikt in de Laravel-sjabloonengine Blad . Om een ​​bestand aan te maken blade je moet het een naam geven – in ons geval – gevolgd door de extensie van het mes. Dit betekent dat het bestand de naam zal hebben form.blade.php.

Het bestand wordt gebruikt blade om weergaven voor gebruikers op de webpagina weer te geven.Er zijn een aantal pre-directivesdefinite of blade steno-syntaxis die u kunt gebruiken. Bijvoorbeeld, @if controleren of aan een voorwaarde is voldaan, @empty controleer of de records niet leeg zijn, @auth controleren of een gebruiker is geverifieerd enzovoort.

Maar laten we teruggaan naar de richtlijn @csrf. Zo gebruik je het:

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

    @csrf
    
</form>

Eerdere versies van Laravel hadden een andere opzet: ze werken allebei en doen hetzelfde.

Innovatie nieuwsbrief
Mis het belangrijkste nieuws over innovatie niet. Meld u aan om ze per e-mail te ontvangen.
<form method="POST" action="{{route('pay')}}">
    
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />
    
</form>

Wanneer het CSRF-token ontbreekt in het ingediende formulierverzoek of als het ongeldig lijkt, genereert Laravel een foutmelding "Pagina verlopen" met een 419-statuscode.

Hoe en waar de CSRF-verificatie plaatsvindt

De middleware VerifyCsrfToken behandelt CSRF-verificatie binnen de Laravel-applicatie. De middleware is ingeschreven Kernel.php en staat in de directory app/Http/Middleware. Dit betekent dat de middleware het wordt geactiveerd voor verzoeken binnen het web, niet gerelateerd aan de API's.

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

De VerifyCsrfToken-middleware breidt de klasse uit Illuminate\Foundation\Http\Middleware\VerifyCsrfToken, d.w.z. CSRF-verificatie is definiét in de klas.

Laten we dieper graven om erachter te komen hoe Laravel omgaat met CSRF-verificatie.

Binnen de klas hebben we de functie tokensMatch.

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

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

in de code bepaalt of de sessie en de ingevoerde CSRF-tokens overeenkomen.

De functie doet twee dingen:

  1. krijgen $this->getTokenFromRequest het token van het inkomende verzoek dat is bijgevoegd via een verborgen veld of de verzoekkop. Het token wordt gedecodeerd en vervolgens teruggestuurd naar de tokenvariabele.
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;
}

In de code krijgt het een token van de header

2. Cast zowel het verzoektoken als de sessie naar een string en gebruik dan hash_equals gebouwd in PHP om te vergelijken of beide strings gelijk zijn. Het resultaat van deze operatie is altijd bool (waar) of (onwaar) .

Ercole Palmeri

Innovatie nieuwsbrief
Mis het belangrijkste nieuws over innovatie niet. Meld u aan om ze per e-mail te ontvangen.

Recente artikelen

Uitgevers en OpenAI ondertekenen overeenkomsten om de informatiestroom die door kunstmatige intelligentie wordt verwerkt, te reguleren

Afgelopen maandag maakte de Financial Times een deal met OpenAI bekend. FT geeft licenties voor haar journalistiek van wereldklasse...

April 30 2024

Online betalingen: hier is hoe streamingdiensten u voor altijd laten betalen

Miljoenen mensen betalen voor streamingdiensten en betalen maandelijkse abonnementskosten. De algemene mening is dat je…

April 29 2024

Veeam biedt de meest uitgebreide ondersteuning voor ransomware, van bescherming tot respons en herstel

Coveware by Veeam zal responsdiensten op het gebied van cyberafpersingsincidenten blijven leveren. Coveware zal forensische en herstelmogelijkheden bieden...

April 23 2024

Groene en digitale revolutie: hoe voorspellend onderhoud de olie- en gasindustrie transformeert

Voorspellend onderhoud zorgt voor een revolutie in de olie- en gassector, met een innovatieve en proactieve benadering van fabrieksbeheer.…

April 22 2024