CSRF ni shughuli hasidi inayofanywa na mshambulizi, ambaye hufanya vitendo kwa niaba ya mtumiaji aliyeidhinishwa, ambayo ni hatari kwa usalama wa wavuti. Kwa bahati nzuri, Laravel hutoa zana za kuzuia aina hii ya hatari.
CSRF inashambulia nyara vipindi vya watumiaji. Hufanya hivyo kwa kumdanganya mtumiaji kuwasilisha ombi kupitia lebo za fomu zilizofichwa au URL hasidi (picha au viungo) bila mtumiaji kujua.
Shambulio hili husababisha mabadiliko katika hali ya kipindi cha mtumiaji, uvujaji wa data, na wakati mwingine wavamizi wanaweza kudanganya data ya mtumiaji wa mwisho katika programu.
Picha iliyo hapo juu inaonyesha hali ambapo usalama wa wavuti umekiukwa. Mhasiriwa hutuma ombi kwa kubofya kiungo (kilichopokewa), kutuma ombi kwa seva ya tovuti ambayo itatoa athari zinazohitajika na mdukuzi, ambaye anapata habari muhimu kwa kupata na kuchezea seva ya tovuti.
Ili kuboresha usalama mtandao wa programu zako, katika kila kipindi cha mtumiaji, Laravel hutengeneza tokeni salama ambazo hutumia ili kuhakikisha kuwa mtumiaji aliyeidhinishwa ndiye anayeomba programu.
Kwa sababu tokeni hii hubadilika kila wakati kipindi cha mtumiaji kinapoundwa upya, mvamizi hawezi kuifikia.
Wakati wowote kuna ombi la kubadilisha habari ya mtumiaji kwenye upande wa seva (backend) kama POST
, PUT
, PATCH
e DELETE
, lazima ujumuishe maagizo @csrf
katika fomu ya ombi blade
HTML. The @csrf
kwa hiyo ni maagizo Blade
kutumika kutengeneza tokeni iliyofichwa iliyothibitishwa na programu.
Maagizo Blade
ni sintaksia inayotumika ndani ya injini ya kiolezo cha Laravel inayoitwa Blade . Ili kuunda faili blade
unapaswa kuipa jina - kwa fomu yetu ya kesi - ikifuatiwa na ugani wa blade. Hii ina maana kwamba faili itakuwa na jina form.blade.php
.
Faili inatumika blade
kutoa maoni kwa watumiaji kwenye ukurasa wa wavuti. Kuna maagizo kadhaa ya awalidefinite au blade shorthand syntax unaweza kutumia. Kwa mfano, @if
angalia ikiwa hali imeridhika, @empty
angalia ikiwa rekodi sio tupu, @auth
angalia ikiwa mtumiaji amethibitishwa na kadhalika.
Lakini turudi kwenye maagizo @csrf
. Hivi ndivyo unavyoitumia:
<form method="POST" action="{{route('pay')}}">
@csrf
</form>
Matoleo ya awali ya Laravel yalikuwa na usanidi tofauti: wote wawili hufanya kazi na kufanya kitu kimoja.
<form method="POST" action="{{route('pay')}}">
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>
Tokeni ya CSRF inapokosekana kwenye ombi la fomu inayowasilishwa au ikionekana kuwa si sahihi, Laravel hutuma ujumbe wa hitilafu wa "Ukurasa Umeisha" na msimbo wa hali ya 419.
Vyombo vya kati VerifyCsrfToken
inashughulikia uthibitishaji wa CSRF ndani ya programu ya Laravel. The middleware
imesajiliwa ndani Kernel.php
na iko kwenye saraka app/Http/Middleware
. Hii ina maana kwamba middleware
inaanzishwa kwa maombi ndani ya wavuti, isiyohusiana na API.
protected $middlewareGroups = [
'web' => [
.
.
.
.
.
\App\Http\Middleware\VerifyCsrfToken::class,
],
];
Programu ya kati ya VerifyCsrfToken huongeza darasa Illuminate\Foundation\Http\Middleware\VerifyCsrfToken
, yaani uthibitishaji wa CSRF ni defiusiku ndani ya darasa.
Hebu tuchimbue zaidi ili kujua jinsi Laravel hushughulikia uthibitishaji wa CSRF.
Ndani ya darasa, tunayo kazi tokensMatch
.
protected function tokensMatch($request)
{
$token = $this->getTokenFromRequest($request);
return is_string($request->session()->token()) &&
is_string($token) &&
hash_equals($request->session()->token(), $token);
}
katika msimbo huamua ikiwa kipindi na tokeni za CSRF za ingizo zinalingana.
Kitendaji hufanya mambo mawili:
$this->getTokenFromRequest
ishara kutoka kwa ombi linaloingia lililoambatishwa kupitia uwanja uliofichwa au kichwa cha ombi. Ishara imesimbwa na kisha kurejeshwa kwa utofauti wa ishara.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;
}
Kwenye nambari pata ishara kutoka kwa kichwa
2. Tuma ishara ya ombi na kipindi kwa kamba na kisha utumie hash_equals
iliyojengwa katika PHP kulinganisha ikiwa kamba zote mbili ni sawa. Matokeo ya operesheni hii ni daima bool (kweli) au (uongo) .
Ercole Palmeri
Operesheni ya ophthalmoplasty kwa kutumia kitazamaji cha kibiashara cha Apple Vision Pro ilifanywa katika Catania Polyclinic…
Kukuza ujuzi mzuri wa magari kupitia kupaka rangi huwatayarisha watoto kwa ujuzi changamano zaidi kama vile kuandika. Kupaka rangi...
Sekta ya majini ni nguvu ya kweli ya kiuchumi duniani, ambayo imepitia kwenye soko la bilioni 150 ...
Jumatatu iliyopita, Financial Times ilitangaza makubaliano na OpenAI. FT inatoa leseni kwa uandishi wake wa habari wa kiwango cha kimataifa…