ЦСРФ је злонамерна активност коју врши нападач, који обавља радње у име аутентификованог корисника, штетне по безбедност веба. На срећу, Ларавел пружа алате за спречавање ове врсте рањивости.
ЦСРФ напади отимају корисничке сесије. Они то раде тако што преваре корисника да поднесе захтев преко скривених ознака обрасца или злонамерних УРЛ адреса (слика или веза) без знања корисника.
Овај напад доводи до промене стања корисничке сесије, цурења података, а понекад хакери могу да манипулишу подацима крајњег корисника у апликацији.
Слика изнад илуструје сценарио у коме је пробијена безбедност на вебу. Жртва шаље захтев кликом на линк (примљено), шаљући захтев серверу веб сајта који ће произвести ефекте које жели хакер, који долази у посед информација корисних за приступ и манипулисање серверу веб странице.
Да побољшамо безбедност веб ваших апликација, у свакој корисничкој сесији, Ларавел генерише сигурне токене које користи да би обезбедио да је аутентификовани корисник тај који захтева апликацију.
Пошто се овај токен мења сваки пут када се корисничка сесија поново генерише, нападач не може да му приступи.
Кад год постоји захтев за промену корисничких информација на страни сервера (позадинска страна) као POST
, PUT
, PATCH
e DELETE
, морате укључити директиву @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);
}
у коду одређује да ли се сесија и улазни ЦСРФ токени поклапају.
Функција ради две ствари:
$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 милијарди...
Прошлог понедељка, Финанциал Тимес је објавио договор са ОпенАИ. ФТ лиценцира своје новинарство светске класе…
Милиони људи плаћају услуге стриминга, плаћајући месечне претплате. Увријежено је мишљење да сте…