CSRF як амали зарароварест, ки аз ҷониби ҳамлакунанда анҷом дода мешавад, ки аз номи корбари тасдиқшуда амалҳоеро анҷом медиҳад, ки ба амнияти веб зарар мерасонад. Хушбахтона, Laravel воситаҳоро барои пешгирии ин намуди осебпазирӣ таъмин мекунад.
CSRF ҳамлаҳои сеанси корбаронро дуздидааст. Онҳо ин корро тавассути фиреб додани корбар барои ирсоли дархост тавассути барчаспҳои шаклҳои пинҳонӣ ё URL-ҳои зараровар (тасвирҳо ё истинодҳо) бидуни огоҳии корбар анҷом медиҳанд.
Ин ҳамла ба тағири ҳолати сеанси корбар, ихроҷи маълумот оварда мерасонад ва баъзан ҳакерҳо метавонанд маълумоти корбари ниҳоӣ дар барномаро идора кунанд.
Тасвири боло сенарияеро нишон медиҳад, ки амнияти веб вайрон мешавад. Ҷабрдида тавассути пахш кардани истинод (қабулшуда) дархост мефиристад, дархостро ба сервери вебсайт мефиристад, ки эффектҳои дилхоҳи ҳакерро ба вуҷуд меорад, ки маълумоти муфидро барои дастрасӣ ва коркарди сервери вебсайт ба даст меорад.
Барои такмил додани амният веби замимаҳои шумо, дар ҳар як сессияи корбар, Laravel аломатҳои бехатарро тавлид мекунад, ки он барои боварӣ ҳосил кардани он, ки корбари тасдиқшуда шахси дархосткунандаи барнома мебошад.
Азбаски ин нишона ҳар дафъае, ки сеанси корбар барқарор мешавад, тағир меёбад, ҳамлакунанда ба он дастрасӣ пайдо карда наметавонад.
Ҳар вақте ки дархост оид ба тағир додани маълумоти корбар дар тарафи сервер (backend) вуҷуд дорад POST
, PUT
, PATCH
e DELETE
, шумо бояд дастурро дохил кунед @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 мефиристад.
Миёнаравӣ 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 мувофиқат мекунанд.
Функсия ду чизро иҷро мекунад:
$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 Vision Pro анҷом дода шуд…
Рушди малакаҳои хуби моторӣ тавассути рангкунӣ кӯдаконро ба малакаҳои мураккабтаре, ба мисли навиштан омода мекунад. Барои ранг кардан…
Бахши баҳрӣ як қудрати воқеии иқтисодии ҷаҳонӣ аст, ки ба бозори 150 миллиард доллар ҳаракат кардааст ...
Рӯзи душанбеи гузашта рӯзномаи Financial Times бо OpenAI созишнома эълон кард. FT журналистикаи сатҳи ҷаҳонии худро иҷозатнома медиҳад…