Cikkek

Laravel Web Security: Mi az a Cross-Site Request Forgery (CSRF)?

Ebben a Laravel oktatóanyagban a webes biztonságról beszélünk, és arról, hogyan védhetjük meg a webalkalmazásokat a Cross-Site Request Forgery vagy CSRF támadásokkal szemben.

A CSRF egy támadó által végrehajtott rosszindulatú tevékenység, aki hitelesített felhasználó nevében hajt végre olyan műveleteket, amelyek károsak a webbiztonságra. Szerencsére a Laravel eszközöket biztosít az ilyen típusú sebezhetőségek megelőzésére.

Mi az a CSRF?

A CSRF megtámadja a felhasználói munkamenetek eltérítését. Ezt úgy teszik meg, hogy ráveszik a felhasználót, hogy a felhasználó tudta nélkül küldjön be kérelmet rejtett űrlapcímkéken vagy rosszindulatú URL-eken (képeken vagy linkeken) keresztül.

Ez a támadás a felhasználói munkamenet állapotának megváltozásához, adatszivárgáshoz vezet, és néha a hackerek manipulálhatják a végfelhasználói adatokat egy alkalmazásban.

A fenti kép egy olyan forgatókönyvet mutat be, amikor a webbiztonság megsérül. Az áldozat egy hivatkozásra kattintva (kapott) kérést küld, amely egy weboldal szerverére küldi el a kérést, amely a hacker által kívánt hatást váltja ki, aki birtokába kerül a webhelyszerver eléréséhez és manipulálásához szükséges információk.

Hogyan lehet megakadályozni a CSRF kéréseket

Hogy javítsa a biztonság Az alkalmazások webes felületén a Laravel minden felhasználói munkamenetben biztonságos tokeneket generál, amelyek segítségével biztosítja, hogy a hitelesített felhasználó legyen az, aki kéri az alkalmazást.

Mivel ez a token minden felhasználói munkamenet újragenerálásakor megváltozik, a támadó nem férhet hozzá.

Amikor van egy kérés a felhasználói adatok módosítására a szerver oldalon (backend), mint pl POSTPUTPATCHDELETE, akkor csatolnia kell az irányelvet @csrf az igénylőlapon blade HTML. A @csrf ezért ez egy irányelv Blade az alkalmazás által jóváhagyott rejtett token generálására szolgál.

Az irányelv Blade a Laravel sablonmotorban használt szintaxis Penge . Fájl létrehozásához blade nevet kell adnia – esetünkben – a penge meghosszabbításával. Ez azt jelenti, hogy a fájl neve lesz form.blade.php.

A fájl használatban van blade nézeteket jelenít meg a felhasználók számára a weboldalon. Van néhány előzetes irányelvdefinite vagy blade gyorsírási szintaxist használhat. Például, @if ellenőrizze, hogy egy feltétel teljesül-e, @empty ellenőrizze, hogy a rekordok nem üresek-e, @auth ellenőrizze, hogy a felhasználó hitelesített-e és így tovább.

De térjünk vissza az irányelvhez @csrf. A következőképpen használja:

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

    @csrf
    
</form>

A Laravel korábbi verzióiban más volt a beállítás: mindkettő működik és ugyanazt csinálják.

Innovációs hírlevél
Ne maradjon le az innovációval kapcsolatos legfontosabb hírekről. Regisztráljon, hogy megkapja őket e-mailben.
<form method="POST" action="{{route('pay')}}">
    
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />
    
</form>

Ha a CSRF token hiányzik a benyújtott űrlapkérésből, vagy érvénytelennek tűnik, a Laravel egy „Oldal lejárt” hibaüzenetet küld a 419-es állapotkóddal.

Hogyan és hol történik a CSRF ellenőrzés

A köztes szoftver VerifyCsrfToken kezeli a CSRF ellenőrzést a Laravel alkalmazáson belül. A middleware be van regisztrálva Kernel.php és a címtárban található app/Http/Middleware. Ez azt jelenti, hogy a middleware a weben belüli kérések esetén aktiválódik, amelyek nem kapcsolódnak az API-khoz.

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

A VerifyCsrfToken köztes szoftver kiterjeszti az osztályt Illuminate\Foundation\Http\Middleware\VerifyCsrfToken, azaz a CSRF ellenőrzés az defiaz osztályon belül.

Ássunk mélyebbre, hogy megtudjuk, hogyan kezeli a Laravel a CSRF-ellenőrzést.

Az osztályon belül megvan a függvény tokensMatch.

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

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

a kódban meghatározza, hogy a munkamenet és a bemeneti CSRF tokenek egyeznek-e.

A függvény két dolgot végez:

  1. származtatja $this->getTokenFromRequest a bejövő kérelemből származó token egy rejtett mezőn vagy a kérés fejlécén keresztül csatolva. A token visszafejtésre kerül, majd visszakerül a token változóba.
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;
}

A kódban a fejlécből kap tokent

2. Öntse mind a kérésjogkivonatot, mind a munkamenetet egy karakterláncba, majd használja hash_equals PHP-be építve összehasonlítani, ha mindkét karakterlánc egyenlő. Ennek a műveletnek az eredménye mindig bool (igaz) vagy (hamis) .

Ercole Palmeri

Innovációs hírlevél
Ne maradjon le az innovációval kapcsolatos legfontosabb hírekről. Regisztráljon, hogy megkapja őket e-mailben.

Friss cikkek

Innovatív beavatkozás a kiterjesztett valóságba, egy Apple nézővel a Catania Poliklinikán

Szemplasztikai műtétet végeztek az Apple Vision Pro reklámmegjelenítővel a Catania Poliklinikán…

Május 3 2024

A színező oldalak előnyei gyerekeknek – a varázslatok világa minden korosztály számára

A finom motoros készségek színezéssel történő fejlesztése felkészíti a gyerekeket olyan összetettebb készségekre, mint az írás. Kiszínezni…

Május 2 2024

A jövő itt van: Hogyan forradalmasítja a hajózási ágazat a globális gazdaságot

A haditengerészeti szektor igazi világgazdasági hatalom, amely egy 150 milliárdos piac felé navigált...

Május 1 2024

A kiadók és az OpenAI megállapodásokat írnak alá a mesterséges intelligencia által feldolgozott információáramlás szabályozására

Múlt hétfőn a Financial Times bejelentette, hogy megállapodást köt az OpenAI-val. Az FT engedélyezi világszínvonalú újságírását…

30 április 2024