CSRF - bu autentifikatsiya qilingan foydalanuvchi nomidan veb-xavfsizlikka zarar etkazuvchi harakatlarni amalga oshiradigan tajovuzkor tomonidan amalga oshiriladigan zararli faoliyat. Yaxshiyamki, Laravel ushbu turdagi zaiflikning oldini olish uchun vositalarni taqdim etadi.
CSRF hujumlari foydalanuvchi seanslarini o'g'irlaydi. Ular buni foydalanuvchini yashirin shakl teglari yoki zararli URL manzillari (rasmlar yoki havolalar) orqali so‘rov yuborishga aldash orqali amalga oshiradilar.
Ushbu hujum foydalanuvchi seansi holatining o'zgarishiga, ma'lumotlar sizib ketishiga olib keladi va ba'zida xakerlar dasturdagi oxirgi foydalanuvchi ma'lumotlarini boshqarishi mumkin.
Yuqoridagi rasmda veb xavfsizligi buzilgan stsenariy tasvirlangan. Jabrlanuvchi havolani bosish orqali so'rov yuboradi (qabul qilingan), veb-sayt serveriga kirish va veb-sayt serverini boshqarish uchun foydali ma'lumotlarga ega bo'lgan xaker tomonidan kerakli effektlarni keltirib chiqaradigan so'rov yuboradi.
yaxshilash uchun xavfsizlik ilovalaringiz veb-saytida, har bir foydalanuvchi seansida Laravel autentifikatsiya qilingan foydalanuvchi dasturni so'ragan shaxs ekanligiga ishonch hosil qilish uchun foydalanadigan xavfsiz tokenlarni ishlab chiqaradi.
Ushbu token har safar foydalanuvchi sessiyasi qayta tiklanganda o'zgarganligi sababli, tajovuzkor unga kira olmaydi.
Har doim server tomonida (backend) foydalanuvchi ma'lumotlarini o'zgartirish so'rovi bo'lsa POST
, PUT
, PATCH
e DELETE
, siz direktivani kiritishingiz kerak @csrf
so'rov shaklida blade
HTML. The @csrf
shuning uchun bu direktivdir Blade
ilova tomonidan tasdiqlangan yashirin tokenni yaratish uchun ishlatiladi.
Direktiv Blade
deb nomlangan Laravel shablon dvigatelida ishlatiladigan sintaksis blade . Fayl yaratish uchun blade
siz unga nom berishingiz kerak - bizning holatda shaklda - keyin pichoqning kengayishi. Bu fayl nomiga ega bo'lishini anglatadi form.blade.php
.
Fayl ishlatiladi blade
veb-sahifada foydalanuvchilar uchun ko'rinishlarni ko'rsatish uchun.Bir nechta pre-direktivalar mavjuddefinite yoki blade stentaksisidan foydalanishingiz mumkin. Masalan, @if
shart bajarilganligini tekshiring, @empty
yozuvlar bo'sh emasligini tekshiring, @auth
foydalanuvchining autentifikatsiya qilinganligini tekshiring va hokazo.
Ammo keling, direktivaga qaytaylik @csrf
. Undan qanday foydalanasiz:
<form method="POST" action="{{route('pay')}}">
@csrf
</form>
Laravelning oldingi versiyalari boshqacha o'rnatishga ega edi: ular ikkalasi ham ishlaydi va bir xil ishni bajaradi.
<form method="POST" action="{{route('pay')}}">
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>
CSRF tokeni yuborilayotgan shakl so'rovida etishmayotgan bo'lsa yoki u noto'g'ri ko'rinsa, Laravel 419 holat kodi bilan "Sahifa muddati tugagan" xato xabarini chiqaradi.
O'rta dastur VerifyCsrfToken
Laravel ilovasida CSRF tekshiruvini boshqaradi. The middleware
da ro'yxatdan o'tgan Kernel.php
va katalogda joylashgan app/Http/Middleware
. Bu shuni anglatadiki, middleware
u API bilan bog'liq bo'lmagan vebdagi so'rovlar uchun ishga tushiriladi.
protected $middlewareGroups = [
'web' => [
.
.
.
.
.
\App\Http\Middleware\VerifyCsrfToken::class,
],
];
VerifyCsrfToken o'rta dasturi sinfni kengaytiradi Illuminate\Foundation\Http\Middleware\VerifyCsrfToken
, ya'ni CSRF tekshiruvi defisinf ichida kechasi.
Laravel CSRF tekshiruvini qanday boshqarishini bilish uchun chuqurroq qazib olaylik.
Sinf ichida bizda funktsiya mavjud tokensMatch
.
protected function tokensMatch($request)
{
$token = $this->getTokenFromRequest($request);
return is_string($request->session()->token()) &&
is_string($token) &&
hash_equals($request->session()->token(), $token);
}
kodda seans va kirish CSRF tokenlari mos kelishini aniqlaydi.
Funktsiya ikkita narsani bajaradi:
$this->getTokenFromRequest
yashirin maydon yoki so'rov sarlavhasi orqali biriktirilgan kiruvchi so'rovning tokeni. Token shifrlangan va keyin token o'zgaruvchisiga qaytariladi.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;
}
Kodda u sarlavhadan token oladi
2. So‘rov tokenini ham, seansni ham satrga o‘tkazing va keyin foydalaning hash_equals
ikkala satr teng bo'lsa, solishtirish uchun PHP da qurilgan. Ushbu operatsiyaning natijasi har doim bool (to'g'ri) yoki (noto'g'ri) .
Ercole Palmeri
Kataniya poliklinikasida Apple Vision Pro tijorat ko‘rish vositasi yordamida oftalmoplastika operatsiyasi o‘tkazildi...
Rang berish orqali nozik vosita ko'nikmalarini rivojlantirish bolalarni yozish kabi murakkabroq ko'nikmalarga tayyorlaydi. Rang berish uchun…
Harbiy dengiz sektori 150 milliardlik bozorga yo'l olgan haqiqiy global iqtisodiy kuchdir...
O'tgan dushanba kuni Financial Times OpenAI bilan shartnoma imzolaganini e'lon qildi. FT o'zining jahon darajasidagi jurnalistikasini litsenziyalaydi...