Artikler

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

I denne Laravel-opplæringen snakker vi om nettsikkerhet og hvordan du beskytter en nettapplikasjon mot forfalskning av forespørsler på tvers av nettsteder eller CSRF-angrep.

CSRF er en ondsinnet aktivitet utført av en angriper, som utfører handlinger på vegne av en autentisert bruker, som er skadelig for nettsikkerheten. Heldigvis gir Laravel verktøyene for å forhindre denne typen sårbarhet.

Hva er CSRF?

CSRF-angrep kaprer brukerøkter. De gjør dette ved å lure en bruker til å sende inn en forespørsel via skjulte skjematagger eller ondsinnede URL-er (bilder eller lenker) uten brukerens viten.

Dette angrepet fører til en endring i brukerøktstatus, datalekkasjer, og noen ganger kan hackere manipulere sluttbrukerdata i en applikasjon.

Bildet ovenfor illustrerer et scenario der nettsikkerheten brytes. Offeret sender en forespørsel ved å klikke på en lenke (mottatt), og sender en forespørsel til en nettsideserver som vil gi effekter ønsket av hackeren, som kommer i besittelse av informasjonen som er nyttig for å få tilgang til og manipulere nettsideserveren.

Hvordan forhindre CSRF-forespørsler

For å forbedre sikkerhet web av applikasjonene dine, i hver brukerøkt, genererer Laravel sikre tokens som den bruker for å sikre at den autentiserte brukeren er den som ber om applikasjonen.

Fordi dette tokenet endres hver gang en brukerøkt blir regenerert, kan en angriper ikke få tilgang til det.

Når det er en forespørsel om å endre brukerinformasjon på serversiden (backend) som POSTPUTPATCHDELETE, må du inkludere direktivet @csrf i forespørselsskjemaet blade HTML. De @csrf det er derfor et direktiv Blade brukes til å generere et skjult token validert av applikasjonen.

Direktivet Blade kalles syntaksen som brukes i Laravel-malmotoren Blade . For å lage en fil blade du må gi den et navn – i vårt skjema – etterfulgt av forlengelsen av bladet. Dette betyr at filen vil ha navnet form.blade.php.

Filen brukes blade for å gjengi visninger for brukere på nettsiden. Det er et par forhåndsdirektiverdefinite eller blad stenografi syntaks du kan bruke. For eksempel, @if sjekk om en betingelse er oppfylt, @empty sjekk om postene ikke er tomme, @auth sjekk om en bruker er autentisert og så videre.

Men la oss gå tilbake til direktivet @csrf. Slik bruker du det:

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

    @csrf
    
</form>

Tidligere versjoner av Laravel hadde et annet oppsett: de både fungerer og gjør det samme.

Nyhetsbrev for innovasjon
Ikke gå glipp av de viktigste nyhetene om innovasjon. Registrer deg for å motta dem på e-post.
<form method="POST" action="{{route('pay')}}">
    
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />
    
</form>

Når CSRF-tokenet mangler fra skjemaforespørselen som sendes inn, eller hvis det virker ugyldig, sender Laravel en "Side utløpt" feilmelding med en 419-statuskode.

Hvordan og hvor CSRF-verifiseringen finner sted

Mellomvaren VerifyCsrfToken håndterer CSRF-verifisering i Laravel-applikasjonen. De middleware er registrert i Kernel.php og ligger i katalogen app/Http/Middleware. Dette betyr at middleware den utløses for forespørsler på nettet, ikke relatert til API-ene.

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

VerifyCsrfToken-mellomvaren utvider klassen Illuminate\Foundation\Http\Middleware\VerifyCsrfToken, dvs. CSRF-verifisering er definatt i klassen.

La oss grave dypere for å finne ut hvordan Laravel håndterer CSRF-verifisering.

Inne i klassen har vi funksjonen tokensMatch.

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

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

i koden bestemmer om økten og inndata-CSRF-tokenene samsvarer.

Funksjonen gjør to ting:

  1. $this->getTokenFromRequest tokenet fra den innkommende forespørselen vedlagt via et skjult felt eller forespørselsoverskriften. Tokenet dekrypteres og returneres deretter til token-variabelen.
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;
}

I koden får den token fra header

2. Kast både forespørselstokenet og økten til en streng og bruk deretter hash_equals bygget i PHP for å sammenligne om begge strengene er like. Resultatet av denne operasjonen er alltid bool (sant) eller (false) .

Ercole Palmeri

Nyhetsbrev for innovasjon
Ikke gå glipp av de viktigste nyhetene om innovasjon. Registrer deg for å motta dem på e-post.

Siste artikler

Utgivere og OpenAI signerer avtaler for å regulere flyten av informasjon som behandles av kunstig intelligens

Sist mandag kunngjorde Financial Times en avtale med OpenAI. FT lisensierer sin journalistikk i verdensklasse...

30 april 2024

Nettbetalinger: Her er hvordan strømmetjenester får deg til å betale for alltid

Millioner av mennesker betaler for strømmetjenester og betaler månedlige abonnementsavgifter. Det er vanlig oppfatning at du...

29 april 2024

Veeam har den mest omfattende støtten for løsepengevare, fra beskyttelse til respons og gjenoppretting

Coveware by Veeam vil fortsette å tilby responstjenester for cyberutpressing. Coveware vil tilby kriminaltekniske og utbedringsmuligheter...

23 april 2024

Grønn og digital revolusjon: Hvordan prediktivt vedlikehold transformerer olje- og gassindustrien

Prediktivt vedlikehold revolusjonerer olje- og gasssektoren, med en innovativ og proaktiv tilnærming til anleggsledelse...

22 april 2024