Straipsniai

„Laravel Web Security“: kas yra kelių svetainių užklausų klastojimas (CSRF)?

Šioje „Laravel“ mokymo programoje kalbame apie žiniatinklio apsaugą ir kaip apsaugoti žiniatinklio programą nuo kelių svetainių užklausų klastojimo arba CSRF atakų.

CSRF yra kenkėjiška veikla, kurią atlieka užpuolikas, kuris atlieka veiksmus autentifikuoto vartotojo vardu ir kenkia žiniatinklio saugumui. Laimei, „Laravel“ teikia priemones, skirtas užkirsti kelią tokio tipo pažeidžiamumui.

Kas yra CSRF?

CSRF atakuoja vartotojų seansų užgrobimą. Jie tai daro klaidindami vartotoją, kad jis pateiktų užklausą naudojant paslėptas formos žymas arba kenkėjiškus URL (vaizdus ar nuorodas) be vartotojo žinios.

Dėl šios atakos pasikeičia vartotojo seanso būsena, nutekėja duomenys, o kartais įsilaužėliai gali manipuliuoti galutinio vartotojo duomenimis programoje.

Aukščiau pateiktame paveikslėlyje parodytas scenarijus, kai pažeidžiama žiniatinklio sauga. Nukentėjusysis siunčia užklausą spustelėdamas nuorodą (gautą), siunčia užklausą į svetainės serverį, kuris duos efektus, kurių nori įsilaužėlis, kuris gauna informaciją, naudingą norint pasiekti svetainės serverį ir juo manipuliuoti.

Kaip išvengti CSRF užklausų

Norėdami pagerinti saugumas Jūsų programų žiniatinklyje, kiekvienoje vartotojo sesijoje „Laravel“ generuoja saugius prieigos raktus, kuriuos naudoja siekdama užtikrinti, kad programos užklausas būtų autentifikuotas vartotojas.

Kadangi šis prieigos raktas keičiasi kiekvieną kartą, kai vartotojo sesija iš naujo sukuriama, užpuolikas negali jo pasiekti.

Kai tik yra užklausa pakeisti vartotojo informaciją serverio pusėje (backend), pvz POSTPUTPATCHDELETE, turite įtraukti direktyvą @csrf prašymo formoje blade HTML. The @csrf todėl tai yra direktyva Blade naudojamas sugeneruoti paslėptą prieigos raktą, patvirtintą programos.

direktyva Blade yra sintaksė, naudojama Laravel šablono variklyje Ašmenys . Norėdami sukurti failą blade turite suteikti jai pavadinimą – mūsų atveju – ir ašmenų išplėtimą. Tai reiškia, kad failas turės pavadinimą form.blade.php.

Failas naudojamas blade kad tinklalapio naudotojams būtų pateiktos peržiūros. Yra keletas išankstinių nurodymųdefigalite naudoti nite arba blade shorthand sintaksę. Pavyzdžiui, @if patikrinkite, ar tenkinama sąlyga, @empty patikrinkite, ar įrašai nėra tušti, @auth patikrinti, ar vartotojas autentifikuotas ir pan.

Bet grįžkime prie direktyvos @csrf. Štai kaip jį naudoti:

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

    @csrf
    
</form>

Ankstesnėse „Laravel“ versijose buvo skirtinga sąranka: jie abu veikia ir daro tą patį.

Inovacijų naujienlaiškis
Nepraleiskite svarbiausių naujienų apie naujoves. Prisiregistruokite, kad gautumėte juos el.
<form method="POST" action="{{route('pay')}}">
    
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />
    
</form>

Kai pateikiamoje formos užklausoje trūksta CSRF prieigos rakto arba jis atrodo neteisingas, Laravel pateikia klaidos pranešimą „Puslapis pasibaigęs“ su būsenos kodu 419.

Kaip ir kur vyksta CSRF patikra

Tarpinė programinė įranga VerifyCsrfToken tvarko CSRF patikrinimą Laravel programoje. The middleware yra registruotas Kernel.php ir yra kataloge app/Http/Middleware. Tai reiškia, kad middleware jis suaktyvinamas, kai pateikiamos užklausos žiniatinklyje, nesusijusios su API.

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

VerifyCsrfToken tarpinė programinė įranga praplečia klasę Illuminate\Foundation\Http\Middleware\VerifyCsrfToken, ty CSRF patvirtinimas yra defisurengtas klasėje.

Pasigilinkime, kad sužinotume, kaip Laravel tvarko CSRF patvirtinimą.

Klasės viduje turime funkciją tokensMatch.

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

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

kode nustato, ar seansas ir įvesties CSRF prieigos raktai sutampa.

Funkcija atlieka du dalykus:

  1. gauti $this->getTokenFromRequest prieigos raktas iš gaunamos užklausos, pridėtas per paslėptą lauką arba užklausos antraštę. Žetonas iššifruojamas ir grąžinamas į prieigos rakto kintamąjį.
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;
}

Kode jis gauna prieigos raktą iš antraštės

2. Perkelkite užklausos prieigos raktą ir seansą į eilutę ir naudokite hash_equals sukurta PHP, kad būtų galima palyginti, ar abi eilutės yra lygios. Šios operacijos rezultatas visada yra bool (tiesa) arba (netiesa) .

Ercole Palmeri

Inovacijų naujienlaiškis
Nepraleiskite svarbiausių naujienų apie naujoves. Prisiregistruokite, kad gautumėte juos el.

Naujausi straipsniai

Naujoviška intervencija į išplėstinę realybę su „Apple“ žiūrovu Katanijos poliklinikoje

Katanijos poliklinikoje buvo atlikta oftalmoplastikos operacija naudojant „Apple Vision Pro“ reklaminę peržiūrą…

3 gegužės 2024

Vaikų spalvinimo puslapių privalumai – magijos pasaulis įvairaus amžiaus žmonėms

Lavindami smulkiosios motorikos įgūdžius dažydami, vaikai paruošiami sudėtingesniems įgūdžiams, pavyzdžiui, rašymui. Norėdami nuspalvinti…

2 gegužės 2024

Ateitis yra čia: kaip laivybos pramonė sukelia pasaulinės ekonomikos revoliuciją

Karinio jūrų laivyno sektorius yra tikra pasaulinė ekonominė galia, kuri pasiekė 150 mlrd.

1 gegužės 2024

Leidėjai ir OpenAI pasirašo sutartis dėl dirbtinio intelekto apdorojamos informacijos srauto reguliavimo

Praėjusį pirmadienį „Financial Times“ paskelbė apie susitarimą su „OpenAI“. FT licencijuoja savo pasaulinio lygio žurnalistiką…

30 balandis 2024