Мақолаҳо

Амнияти веби Laravel: Сохтакории дархости байнисоҳавӣ (CSRF) чист?

Дар ин дарси Laravel мо дар бораи Амнияти Web ва чӣ гуна муҳофизат кардани барномаи веб аз қалбакии дархости байнисоҳавӣ ё ҳамлаҳои CSRF сӯҳбат мекунем.

CSRF як амали зарароварест, ки аз ҷониби ҳамлакунанда анҷом дода мешавад, ки аз номи корбари тасдиқшуда амалҳоеро анҷом медиҳад, ки ба амнияти веб зарар мерасонад. Хушбахтона, Laravel воситаҳоро барои пешгирии ин намуди осебпазирӣ таъмин мекунад.

CSRF чист?

CSRF ҳамлаҳои сеанси корбаронро дуздидааст. Онҳо ин корро тавассути фиреб додани корбар барои ирсоли дархост тавассути барчаспҳои шаклҳои пинҳонӣ ё URL-ҳои зараровар (тасвирҳо ё истинодҳо) бидуни огоҳии корбар анҷом медиҳанд.

Ин ҳамла ба тағири ҳолати сеанси корбар, ихроҷи маълумот оварда мерасонад ва баъзан ҳакерҳо метавонанд маълумоти корбари ниҳоӣ дар барномаро идора кунанд.

Тасвири боло сенарияеро нишон медиҳад, ки амнияти веб вайрон мешавад. Ҷабрдида тавассути пахш кардани истинод (қабулшуда) дархост мефиристад, дархостро ба сервери вебсайт мефиристад, ки эффектҳои дилхоҳи ҳакерро ба вуҷуд меорад, ки маълумоти муфидро барои дастрасӣ ва коркарди сервери вебсайт ба даст меорад.

Чӣ тавр пешгирӣ кардани дархостҳои CSRF

Барои такмил додани амният веби замимаҳои шумо, дар ҳар як сессияи корбар, Laravel аломатҳои бехатарро тавлид мекунад, ки он барои боварӣ ҳосил кардани он, ки корбари тасдиқшуда шахси дархосткунандаи барнома мебошад.

Азбаски ин нишона ҳар дафъае, ки сеанси корбар барқарор мешавад, тағир меёбад, ҳамлакунанда ба он дастрасӣ пайдо карда наметавонад.

Ҳар вақте ки дархост оид ба тағир додани маълумоти корбар дар тарафи сервер (backend) вуҷуд дорад POSTPUTPATCHDELETE, шумо бояд дастурро дохил кунед @csrf дар шакли дархост blade HTML. Дар @csrf бинобар ин дастурамал аст Blade барои тавлиди аломати пинҳонии аз ҷониби барнома тасдиқшуда истифода мешавад.

Директива Blade синтаксисест, ки дар муҳаррики қолаби Laravel истифода мешавад, ки номида мешавад хас . Барои сохтани файл blade шумо бояд ба он ном диҳед - дар шакли ҳолати мо - пас аз он васеъшавии майса. Ин маънои онро дорад, ки файл ном дорад form.blade.php.

Файл истифода мешавад blade Барои пешниҳоди назари корбарон дар саҳифаи интернетӣ Якчанд дастурҳои пешакӣ мавҷудандdefinite ё синтаксиси стенографияи майса шумо метавонед истифода баред. Барои намуна, @if санҷед, ки оё шарт қонеъ аст, @empty санҷед, ки сабтҳо холӣ нестанд, @auth санҷед, ки оё корбар тасдиқ шудааст ва ғайра.

Аммо биёед ба дастурамал баргардем @csrf. Ин аст, ки чӣ тавр шумо онро истифода мебаред:

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

    @csrf
    
</form>

Версияҳои қаблии Laravel танзимоти дигар доштанд: онҳо ҳам кор мекунанд ва ҳам як корро мекунанд.

Бюллетени инноватсионӣ
Муҳимтарин хабарҳоро дар бораи навоварӣ аз даст надиҳед. Барои гирифтани онҳо тавассути почтаи электронӣ обуна шавед.
<form method="POST" action="{{route('pay')}}">
    
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />
    
</form>

Вақте ки аломати CSRF дар дархости шакли пешниҳодшуда мавҷуд нест ё агар он беэътибор пайдо шавад, Laravel паёми хатогии "Саҳифа ба охир расид" -ро бо рамзи ҳолати 419 мефиристад.

Тафтиши CSRF чӣ гуна ва дар куҷо сурат мегирад

Миёнаравӣ VerifyCsrfToken Санҷиши CSRF-ро дар дохили барномаи Laravel идора мекунад. Дар middleware ба қайд гирифта шудааст Kernel.php ва дар директория ҷойгир аст app/Http/Middleware. Ин маънои онро дорад, ки ба middleware он барои дархостҳо дар дохили веб оғоз мешавад, ки ба APIҳо алоқаманд нестанд.

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

Миёнаравӣ VerifyCsrfToken синфро васеъ мекунад Illuminate\Foundation\Http\Middleware\VerifyCsrfToken, яъне санҷиши CSRF аст defiдар дохили синф.

Биёед амиқтар кобед, то бифаҳмем, ки Laravel тафтиши CSRF-ро чӣ гуна идора мекунад.

Дар дохили синф, мо функсия дорем tokensMatch.

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

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

дар код муайян мекунад, ки оё сессия ва аломатҳои вуруди CSRF мувофиқат мекунанд.

Функсия ду чизро иҷро мекунад:

  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 дар PHP сохта шудааст, то ки агар ҳарду сатр баробар бошанд. Натиҷаи ин амалиёт ҳамеша аст bool (рост) ё (дурӯғ) .

Ercole Palmeri

Бюллетени инноватсионӣ
Муҳимтарин хабарҳоро дар бораи навоварӣ аз даст надиҳед. Барои гирифтани онҳо тавассути почтаи электронӣ обуна шавед.

Мақолаҳои охирин

Дахолати инноватсионӣ дар воқеияти васеъшуда бо тамошобини Apple дар поликлиникаи Катания

Дар поликлиникаи Катания амалиёти офтальмопластика бо истифода аз намоишгари тиҷоратии Apple Vision Pro анҷом дода шуд…

3 Май 2024

Манфиатҳои ранг кардани саҳифаҳо барои кӯдакон - ҷаҳони ҷодугарӣ барои ҳама синну сол

Рушди малакаҳои хуби моторӣ тавассути рангкунӣ кӯдаконро ба малакаҳои мураккабтаре, ба мисли навиштан омода мекунад. Барои ранг кардан…

2 Май 2024

Оянда ин аст: Чӣ гуна саноати боркашонӣ иқтисоди ҷаҳонро инқилоб мекунад

Бахши баҳрӣ як қудрати воқеии иқтисодии ҷаҳонӣ аст, ки ба бозори 150 миллиард доллар ҳаракат кардааст ...

1 Май 2024

Ноширон ва OpenAI барои танзими ҷараёни иттилооте, ки тавассути зеҳни сунъӣ коркард мешаванд, созишнома имзо мекунанд

Рӯзи душанбеи гузашта рӯзномаи Financial Times бо OpenAI созишнома эълон кард. FT журналистикаи сатҳи ҷаҳонии худро иҷозатнома медиҳад…

30 апрел 2024

Инноватсияро ба забони худ хонед

Бюллетени инноватсионӣ
Муҳимтарин хабарҳоро дар бораи навоварӣ аз даст надиҳед. Барои гирифтани онҳо тавассути почтаи электронӣ обуна шавед.

Моро дунбол кунед