Articole

Laravel Web Security: Ce este falsificarea cererilor între site-uri (CSRF)?

În acest tutorial Laravel vorbim despre Web Security și despre cum să protejați o aplicație web de atacurile Cross-Site Request Forgery sau CSRF.

CSRF este o activitate rău intenționată efectuată de un atacator, care efectuează acțiuni în numele unui utilizator autentificat, în detrimentul securității web. Din fericire, Laravel oferă instrumentele pentru a preveni acest tip de vulnerabilitate.

Ce este CSRF?

Atacuri CSRF deturnează sesiunile utilizatorilor. Ei fac acest lucru prin păcălirea unui utilizator să trimită o solicitare prin etichete de formular ascunse sau URL-uri rău intenționate (imagini sau linkuri) fără știrea utilizatorului.

Acest atac duce la o schimbare a stării sesiunii utilizator, scurgeri de date și, uneori, hackerii pot manipula datele utilizatorului final într-o aplicație.

Imaginea de mai sus ilustrează un scenariu în care securitatea web este încălcată. Victima trimite o cerere făcând clic pe un link (primit), trimițând o solicitare către un server de site web care va produce efectele dorite de hacker, care intră în posesia informațiilor utile pentru accesarea și manipularea serverului site-ului.

Cum să preveniți solicitările CSRF

Pentru a îmbunătăți siguranță web al aplicațiilor dvs., în fiecare sesiune de utilizator, Laravel generează token-uri securizate pe care le utilizează pentru a se asigura că utilizatorul autentificat este cel care solicită aplicația.

Deoarece acest token se modifică de fiecare dată când o sesiune de utilizator este regenerată, un atacator nu îl poate accesa.

Ori de câte ori există o solicitare de modificare a informațiilor despre utilizator pe partea serverului (backend), cum ar fi POSTPUTPATCHDELETE, trebuie să includeți directiva @csrf în formularul de cerere blade HTML. The @csrf este deci o directivă Blade folosit pentru a genera un token ascuns validat de aplicație.

Directiva Blade este sintaxa folosită în motorul de șabloane Laravel numit Lamă . Pentru a crea un fișier blade trebuie să îi dați un nume – în forma noastră de caz – urmat de extensia lamei. Aceasta înseamnă că fișierul va avea numele form.blade.php.

Fișierul este folosit blade pentru a reda vizualizări pentru utilizatori pe pagina web. Există câteva directive prealabiledefisintaxa scurtă nite sau blade pe care o puteți utiliza. De exemplu, @if verifică dacă o condiție este îndeplinită, @empty verificați dacă înregistrările nu sunt goale, @auth verifică dacă un utilizator este autentificat și așa mai departe.

Dar să revenim la directivă @csrf. Iată cum îl folosiți:

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

    @csrf
    
</form>

Versiunile anterioare de Laravel aveau o configurație diferită: ambele funcționează și fac același lucru.

Buletin informativ de inovare
Nu rata cele mai importante știri despre inovație. Înscrieți-vă pentru a le primi pe e-mail.
<form method="POST" action="{{route('pay')}}">
    
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />
    
</form>

Când simbolul CSRF nu este prezent în cererea de formular care este trimisă sau dacă pare a fi invalid, Laravel generează un mesaj de eroare „Pagină expirată” cu un cod de stare 419.

Cum și unde are loc verificarea CSRF

Middleware-ul VerifyCsrfToken se ocupă de verificarea CSRF în cadrul aplicației Laravel. The middleware este înregistrat în Kernel.php și se află în director app/Http/Middleware. Aceasta înseamnă că middleware este declanșat pentru solicitări din web, nu sunt legate de API-uri.

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

Middleware-ul VerifyCsrfToken extinde clasa Illuminate\Foundation\Http\Middleware\VerifyCsrfToken, adică verificarea CSRF este definitate în sala de clasă.

Să ne aprofundăm pentru a afla cum gestionează Laravel verificarea CSRF.

În cadrul clasei, avem funcția tokensMatch.

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

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

în cod determină dacă sesiunea și jetoanele CSRF de intrare se potrivesc.

Funcția face două lucruri:

  1. derivă $this->getTokenFromRequest jetonul de la cererea primită atașat printr-un câmp ascuns sau antetul cererii. Tokenul este decriptat și apoi returnat la variabila token.
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;
}

În cod primește un simbol din antet

2. Transmite atât jetonul de solicitare, cât și sesiune într-un șir și apoi folosește hash_equals construit în PHP pentru a compara dacă ambele șiruri sunt egale. Rezultatul acestei operațiuni este întotdeauna bool (adevărat) sau (fals) .

Ercole Palmeri

Buletin informativ de inovare
Nu rata cele mai importante știri despre inovație. Înscrieți-vă pentru a le primi pe e-mail.

Articole recente

Editorii și OpenAI semnează acorduri pentru a reglementa fluxul de informații procesate de Inteligența Artificială

Luni trecută, Financial Times a anunțat un acord cu OpenAI. FT își licențiază jurnalismul de clasă mondială...

Aprilie 30 2024

Plăți online: Iată cum serviciile de streaming vă fac să plătiți pentru totdeauna

Milioane de oameni plătesc pentru serviciile de streaming, plătind taxe lunare de abonament. Este o părere comună că tu...

Aprilie 29 2024

Veeam oferă cel mai complet suport pentru ransomware, de la protecție la răspuns și recuperare

Coveware de la Veeam va continua să ofere servicii de răspuns la incidente de extorcare cibernetică. Coveware va oferi capacități criminalistice și de remediere...

Aprilie 23 2024

Revoluția verde și digitală: cum întreținerea predictivă transformă industria petrolului și gazelor

Întreținerea predictivă revoluționează sectorul petrolului și gazelor, cu o abordare inovatoare și proactivă a managementului uzinelor...

Aprilie 22 2024