Чланци

Ларавел веб безбедност: Шта је фалсификовање захтева на више локација (ЦСРФ)?

У овом Ларавел туторијалу говоримо о Веб безбедности и како заштитити веб апликацију од фалсификовања захтева на више локација или ЦСРФ напада.

ЦСРФ је злонамерна активност коју врши нападач, који обавља радње у име аутентификованог корисника, штетне по безбедност веба. На срећу, Ларавел пружа алате за спречавање ове врсте рањивости.

Шта је ЦСРФ?

ЦСРФ напади отимају корисничке сесије. Они то раде тако што преваре корисника да поднесе захтев преко скривених ознака обрасца или злонамерних УРЛ адреса (слика или веза) без знања корисника.

Овај напад доводи до промене стања корисничке сесије, цурења података, а понекад хакери могу да манипулишу подацима крајњег корисника у апликацији.

Слика изнад илуструје сценарио у коме је пробијена безбедност на вебу. Жртва шаље захтев кликом на линк (примљено), шаљући захтев серверу веб сајта који ће произвести ефекте које жели хакер, који долази у посед информација корисних за приступ и манипулисање серверу веб странице.

Како спречити ЦСРФ захтеве

Да побољшамо безбедност веб ваших апликација, у свакој корисничкој сесији, Ларавел генерише сигурне токене које користи да би обезбедио да је аутентификовани корисник тај који захтева апликацију.

Пошто се овај токен мења сваки пут када се корисничка сесија поново генерише, нападач не може да му приступи.

Кад год постоји захтев за промену корисничких информација на страни сервера (позадинска страна) као POSTPUTPATCHDELETE, морате укључити директиву @csrf у обрасцу захтева blade ХТМЛ. Тхе @csrf дакле директива Blade користи се за генерисање скривеног токена потврђеног од стране апликације.

Директива Blade је синтакса која се користи у оквиру Ларавел шаблонског механизма под називом Сечиво . Да бисте креирали датотеку blade морате му дати име – у нашем облику – након чега следи продужетак сечива. То значи да ће датотека имати име form.blade.php.

Датотека се користи blade за приказивање приказа за кориснике на веб страници Постоји неколико предупутставаdefiсинтакса ните или бладе стенограма коју можете користити. На пример, @if провери да ли је услов испуњен, @empty проверите да ли евиденција није празна, @auth проверите да ли је корисник аутентификован и тако даље.

Али да се вратимо на директиву @csrf. Ево како га користите:

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

    @csrf
    
</form>

Претходне верзије Ларавела су имале другачију поставку: обе раде и раде исту ствар.

Иновациони билтен
Не пропустите најважније вести о иновацијама. Пријавите се да их примате путем е-поште.
<form method="POST" action="{{route('pay')}}">
    
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />
    
</form>

Када ЦСРФ токен недостаје у захтеву за образац који се шаље или ако се чини неважећим, Ларавел шаље поруку о грешци „Страница је истекла“ са статусним кодом 419.

Како и где се ЦСРФ верификација одвија

Миддлеваре VerifyCsrfToken рукује ЦСРФ верификацијом у оквиру Ларавел апликације. Тхе middleware је регистрован у Kernel.php и налази се у именику app/Http/Middleware. То значи да је middleware покреће се за захтеве унутар веба, који нису повезани са АПИ-јима.

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

Међуовер ВерифиЦсрфТокен проширује класу Illuminate\Foundation\Http\Middleware\VerifyCsrfToken, односно ЦСРФ верификација је defiнотед унутар учионице.

Хајде да копамо дубље да сазнамо како Ларавел управља ЦСРФ верификацијом.

Унутар класе имамо функцију tokensMatch.

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

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

у коду одређује да ли се сесија и улазни ЦСРФ токени поклапају.

Функција ради две ствари:

  1. изводи $this->getTokenFromRequest токен из долазног захтева приложеног преко скривеног поља или заглавља захтева. Токен се дешифрује и затим враћа у променљиву токена.
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;
}

У коду узмите токен из заглавља

2. Пребаците и токен захтева и сесију у стринг, а затим употребите hash_equals уграђен у ПХП за поређење да ли су оба низа једнака. Резултат ове операције је увек боол (тачно) или (нетачно) .

Ercole Palmeri

Иновациони билтен
Не пропустите најважније вести о иновацијама. Пријавите се да их примате путем е-поште.

Недавни чланци

Предности бојанка за децу - свет магије за све узрасте

Развијање финих моторичких вештина кроз бојење припрема децу за сложеније вештине попут писања. Боји…

КСНУМКС Мај КСНУМКС

Будућност је ту: Како бродарска индустрија револуционише глобалну економију

Поморски сектор је права глобална економска сила, која је кренула ка тржишту од 150 милијарди...

КСНУМКС Мај КСНУМКС

Издавачи и ОпенАИ потписују уговоре за регулисање протока информација које обрађује вештачка интелигенција

Прошлог понедељка, Финанциал Тимес је објавио договор са ОпенАИ. ФТ лиценцира своје новинарство светске класе…

КСНУМКС април КСНУМКС

Онлине плаћања: Ево како вас услуге стримовања чине да плаћате заувек

Милиони људи плаћају услуге стриминга, плаћајући месечне претплате. Увријежено је мишљење да сте…

КСНУМКС април КСНУМКС

Прочитајте Иновације на свом језику

Иновациони билтен
Не пропустите најважније вести о иновацијама. Пријавите се да их примате путем е-поште.

Пратите нас