Artikuj

Laravel Web Security: Çfarë është Falsifikimi i Kërkesave Ndër-Site (CSRF)?

Në këtë tutorial të Laravel ne flasim për Sigurinë e Uebit dhe si të mbroni një aplikacion ueb nga sulmet e falsifikimit të kërkesave ndër-site ose CSRF.

CSRF është një aktivitet keqdashës i kryer nga një sulmues, i cili kryen veprime në emër të një përdoruesi të vërtetuar, të dëmshme për sigurinë e uebit. Për fat të mirë, Laravel ofron mjetet për të parandaluar këtë lloj cenueshmërie.

Çfarë është CSRF?

Sulmet CSRF rrëmbejnë seancat e përdoruesve. Ata e bëjnë këtë duke mashtruar një përdorues për të paraqitur një kërkesë përmes etiketave të formave të fshehura ose URL-ve me qëllim të keq (imazhe ose lidhje) pa dijeninë e përdoruesit.

Ky sulm çon në një ndryshim në gjendjen e sesionit të përdoruesit, rrjedhjet e të dhënave dhe ndonjëherë hakerat mund të manipulojnë të dhënat e përdoruesit fundor në një aplikacion.

Imazhi i mësipërm ilustron një skenar ku shkelet siguria e uebit. Viktima dërgon një kërkesë duke klikuar në një lidhje (të marrë), duke dërguar një kërkesë në një server të faqes së internetit, i cili do të prodhojë efektet e dëshiruara nga hakeri, i cili zotëron informacionin e dobishëm për aksesin dhe manipulimin e serverit të faqes.

Si të parandaloni kërkesat CSRF

Për të përmirësuar siguri ueb i aplikacioneve tuaja, në çdo seancë përdoruesi, Laravel gjeneron argumente të sigurta të cilat i përdor për të siguruar që përdoruesi i vërtetuar është ai që kërkon aplikacionin.

Për shkak se kjo shenjë ndryshon çdo herë që një sesion përdoruesi rigjenerohet, një sulmues nuk mund të hyjë në të.

Sa herë që ka një kërkesë për të ndryshuar informacionin e përdoruesit në anën e serverit (backend) si POSTPUTPATCHDELETE, duhet të përfshini direktivën @csrf në formularin e kërkesës blade HTML. Të @csrf prandaj është një direktivë Blade përdoret për të gjeneruar një shenjë të fshehur të vërtetuar nga aplikacioni.

Direktiva Blade quhet sintaksa e përdorur brenda motorit të shabllonit Laravel Teh . Për të krijuar një skedar blade ju duhet t'i jepni një emër - në formën tonë të rastit - e ndjekur nga zgjatja e tehut. Kjo do të thotë që skedari do të ketë emrin form.blade.php.

Skedari është përdorur blade për të dhënë pamje për përdoruesit në faqen e internetit. Ka disa udhëzime paraprakedefiSintaksa e stenografisë nite ose blade mund të përdorni. Për shembull, @if kontrolloni nëse një kusht është i plotësuar, @empty kontrolloni nëse të dhënat nuk janë bosh, @auth kontrolloni nëse një përdorues është vërtetuar dhe kështu me radhë.

Por le të kthehemi te direktiva @csrf. Ja se si e përdorni:

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

    @csrf
    
</form>

Versionet e mëparshme të Laravel kishin një konfigurim të ndryshëm: të dy punojnë dhe bëjnë të njëjtën gjë.

Buletini i inovacionit
Mos humbisni lajmet më të rëndësishme mbi inovacionin. Regjistrohuni për t'i marrë ato me email.
<form method="POST" action="{{route('pay')}}">
    
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />
    
</form>

Kur shenja CSRF mungon në kërkesën e formularit që po dorëzohet ose nëse duket e pavlefshme, Laravel hedh një mesazh gabimi "Page Expired" me një kod statusi 419.

Si dhe ku bëhet verifikimi CSRF

Pajisjet e mesme VerifyCsrfToken trajton verifikimin CSRF brenda aplikacionit Laravel. Të middleware është i regjistruar në Kernel.php dhe ndodhet në drejtori app/Http/Middleware. Kjo do të thotë se middleware aktivizohet për kërkesat brenda ueb-it, që nuk lidhen me API-të.

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

Softueri i mesëm VerifyCsrfToken zgjeron klasën Illuminate\Foundation\Http\Middleware\VerifyCsrfToken, pra verifikimi CSRF është definatën brenda klasës.

Le të gërmojmë më thellë për të zbuluar se si Laravel e trajton verifikimin CSRF.

Brenda klasës kemi funksionin 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ë kod përcakton nëse sesioni dhe shenjat hyrëse CSRF përputhen.

Funksioni bën dy gjëra:

  1. rrjedh $this->getTokenFromRequest shenjën nga kërkesa hyrëse e bashkangjitur nëpërmjet një fushe të fshehur ose kokës së kërkesës. Token deshifrohet dhe më pas kthehet në ndryshoren 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ë kod ai merr shenjë nga header

2. Hidhni si shenjën e kërkesës ashtu edhe seancën në një varg dhe më pas përdorni hash_equals ndërtuar në PHP për të krahasuar nëse të dy vargjet janë të barabarta. Rezultati i këtij operacioni është gjithmonë bool (e vërtetë) ose (e rreme) .

Ercole Palmeri

Buletini i inovacionit
Mos humbisni lajmet më të rëndësishme mbi inovacionin. Regjistrohuni për t'i marrë ato me email.

Artikujt e fundit

Ndërhyrje novatore në realitetin e shtuar, me një shikues Apple në Poliklinikën Catania

Një operacion oftalmoplastik duke përdorur shikuesin komercial Apple Vision Pro u krye në Poliklinikën Catania…

3 Maj 2024

Përfitimet e Faqeve të Ngjyrosjes për Fëmijë - një botë magjike për të gjitha moshat

Zhvillimi i aftësive të shkëlqyera motorike përmes ngjyrosjes i përgatit fëmijët për aftësi më komplekse si shkrimi. Për të ngjyrosur…

2 Maj 2024

E ardhmja është këtu: Si industria e transportit po revolucionarizon ekonominë globale

Sektori detar është një fuqi e vërtetë ekonomike globale, e cila ka lundruar drejt një tregu prej 150 miliardë...

1 Maj 2024

Botuesit dhe OpenAI nënshkruajnë marrëveshje për të rregulluar rrjedhën e informacionit të përpunuar nga Inteligjenca Artificiale

Të hënën e kaluar, Financial Times njoftoi një marrëveshje me OpenAI. FT licencon gazetarinë e saj të klasit botëror…

30 Prill 2024