raksti

Laravel Web Security: kas ir starpvietņu pieprasījuma viltošana (CSRF)?

Šajā Laravel apmācībā mēs runājam par tīmekļa drošību un to, kā aizsargāt tīmekļa lietojumprogrammu no Cross-Site Request Forgery vai CSRF uzbrukumiem.

CSRF ir ļaunprātīga darbība, ko veic uzbrucējs, kurš veic darbības autentificēta lietotāja vārdā, kas kaitē tīmekļa drošībai. Par laimi, Laravel nodrošina rīkus, lai novērstu šāda veida ievainojamību.

Kas ir CSRF?

CSRF uzbrūk lietotāju sesiju nolaupīšanai. Viņi to dara, maldinot lietotāju iesniegt pieprasījumu, izmantojot slēptos veidlapu tagus vai ļaunprātīgus URL (attēlus vai saites), lietotājam nezinot.

Šis uzbrukums izraisa izmaiņas lietotāja sesijas stāvoklī, datu noplūdi, un dažreiz hakeri var manipulēt ar galalietotāja datiem lietojumprogrammā.

Augšējā attēlā ir parādīts scenārijs, kurā tiek pārkāpta tīmekļa drošība. Cietušais nosūta pieprasījumu, noklikšķinot uz saites (saņemts), nosūtot pieprasījumu vietnes serverim, kas radīs hakera vēlamos efektus, kuru rīcībā nonāk informācija, kas ir noderīga, lai piekļūtu vietnes serverim un ar to manipulētu.

Kā novērst CSRF pieprasījumus

Lai uzlabotu drošība Jūsu lietojumprogrammu tīmeklī, katrā lietotāja sesijā Laravel ģenerē drošus marķierus, kurus tā izmanto, lai nodrošinātu, ka autentificētais lietotājs ir tas, kurš pieprasa lietojumprogrammu.

Tā kā šis marķieris mainās ikreiz, kad tiek atjaunota lietotāja sesija, uzbrucējs nevar tai piekļūt.

Ikreiz, kad ir pieprasījums mainīt lietotāja informāciju servera pusē (backend), piemēram POSTPUTPATCHDELETE, jums ir jāiekļauj direktīva @csrf pieprasījuma veidlapā blade HTML. The @csrf tāpēc tā ir direktīva Blade izmanto, lai ģenerētu slēptu marķieri, ko apstiprinājusi lietojumprogramma.

Direktīva Blade ir sintakse, ko izmanto Laravel veidņu dzinējā Asmens . Lai izveidotu failu blade jums ir jāpiešķir tam nosaukums — mūsu gadījumā —, kam seko asmens pagarinājums. Tas nozīmē, ka failam būs nosaukums form.blade.php.

Fails tiek izmantots blade lai atveidotu tīmekļa lapas lietotāju skatījumus. Ir dažas iepriekšējas direktīvasdefinite vai blade saīsināto sintakse, ko varat izmantot. Piemēram, @if pārbaudiet, vai nosacījums ir izpildīts, @empty pārbaudiet, vai ieraksti nav tukši, @auth pārbaudiet, vai lietotājs ir autentificēts un tā tālāk.

Bet atgriezīsimies pie direktīvas @csrf. Lūk, kā jūs to izmantojat:

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

    @csrf
    
</form>

Iepriekšējām Laravel versijām bija atšķirīgs uzstādījums: tās abas darbojas un dara vienu un to pašu.

Inovāciju biļetens
Nepalaidiet garām svarīgākās ziņas par jauninājumiem. Reģistrējieties, lai tos saņemtu pa e-pastu.
<form method="POST" action="{{route('pay')}}">
    
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />
    
</form>

Ja iesniegtajā veidlapas pieprasījumā trūkst CSRF marķiera vai ja tas šķiet nederīgs, Laravel parāda kļūdas ziņojumu “Lapas derīguma termiņš beidzies” ar statusa kodu 419.

Kā un kur notiek CSRF pārbaude

Starpprogrammatūra VerifyCsrfToken apstrādā CSRF verifikāciju Laravel lietojumprogrammā. The middleware ir reģistrēts Kernel.php un atrodas direktorijā app/Http/Middleware. Tas nozīmē, ka middleware tas tiek aktivizēts pieprasījumiem tīmeklī, kas nav saistīti ar API.

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

VerifyCsrfToken starpprogrammatūra paplašina klasi Illuminate\Foundation\Http\Middleware\VerifyCsrfToken, t.i., CSRF verifikācija ir defivakars klasē.

Padziļināsimies, lai uzzinātu, kā Laravel apstrādā CSRF verifikāciju.

Klasē mums ir funkcija tokensMatch.

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

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

kodā nosaka, vai sesija un ievades CSRF marķieri sakrīt.

Funkcija veic divas lietas:

  1. gūt $this->getTokenFromRequest marķieris no ienākošā pieprasījuma, kas pievienots, izmantojot slēptu lauku vai pieprasījuma galveni. Tokens tiek atšifrēts un pēc tam atgriezts marķiera mainīgajā.
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;
}

Kodā tas saņem pilnvaru no galvenes

2. Apraidiet gan pieprasījuma pilnvaru, gan sesiju virknē un pēc tam izmantojiet hash_equals iebūvēts PHP, lai salīdzinātu, vai abas virknes ir vienādas. Šīs operācijas rezultāts vienmēr ir bool (patiess) vai (false) .

Ercole Palmeri

Inovāciju biļetens
Nepalaidiet garām svarīgākās ziņas par jauninājumiem. Reģistrējieties, lai tos saņemtu pa e-pastu.

Jaunākie Raksti

Google jaunais mākslīgais intelekts var modelēt DNS, RNS un "visas dzīvības molekulas"

Google DeepMind ievieš uzlabotu sava mākslīgā intelekta modeļa versiju. Jaunais uzlabotais modelis nodrošina ne tikai…

9 maijā 2024

Laravela moduļu arhitektūras izpēte

Laravel, kas slavena ar savu eleganto sintaksi un jaudīgām funkcijām, nodrošina arī stabilu pamatu moduļu arhitektūrai. Tur…

9 maijā 2024

Cisco Hypershield un Splunk iegāde Sākas jaunais drošības laikmets

Cisco un Splunk palīdz klientiem paātrināt viņu ceļu uz nākotnes drošības operāciju centru (SOC), izmantojot…

8 maijā 2024

Papildus ekonomiskajai pusei: nepārprotamās izpirkuma programmatūras izmaksas

Ransomware ir dominējusi ziņās pēdējos divus gadus. Lielākā daļa cilvēku labi apzinās, ka uzbrukumi…

6 maijā 2024

Novatoriska iejaukšanās paplašinātajā realitātē ar Apple skatītāju Katānijas poliklīnikā

Katānijas poliklīnikā tika veikta oftalmoplastikas operācija, izmantojot Apple Vision Pro komerciālo skatītāju…

3 maijā 2024

Krāsojamo lapu priekšrocības bērniem — burvju pasaule visu vecumu cilvēkiem

Smalko motoriku attīstīšana, izmantojot krāsošanu, sagatavo bērnus sarežģītākām prasmēm, piemēram, rakstīšanai. Lai krāsotu…

2 maijā 2024

Nākotne ir klāt: kā kuģniecības nozare revolucionizē globālo ekonomiku

Jūras flotes nozare ir patiess globāls ekonomikas spēks, kas ir virzījies uz 150 miljardu tirgu...

1 maijā 2024

Izdevēji un OpenAI paraksta līgumus, lai regulētu mākslīgā intelekta apstrādātās informācijas plūsmu

Pagājušajā pirmdienā Financial Times paziņoja par darījumu ar OpenAI. FT licencē savu pasaules līmeņa žurnālistiku…

30 aprīlis 2024