Maqolalar

Laravel veb xavfsizligi: saytlararo so'rovlarni qalbakilashtirish (CSRF) nima?

Ushbu Laravel qo'llanmasida biz veb-xavfsizlik va veb-ilovani saytlararo so'rovni soxtalashtirish yoki CSRF hujumlaridan qanday himoya qilish haqida gapiramiz.

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 nima?

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.

CSRF so'rovlarini qanday oldini olish mumkin

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 POSTPUTPATCHDELETE, 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.

Innovatsion axborot byulleteni
Innovatsiyalar haqidagi eng muhim yangiliklarni o'tkazib yubormang. Ularni elektron pochta orqali olish uchun ro'yxatdan o'ting.
<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.

CSRF tekshiruvi qanday va qayerda amalga oshiriladi

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:

  1. kelib chiqadi $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

Innovatsion axborot byulleteni
Innovatsiyalar haqidagi eng muhim yangiliklarni o'tkazib yubormang. Ularni elektron pochta orqali olish uchun ro'yxatdan o'ting.

So'nggi maqolalar

Catania poliklinikasida Apple tomoshabin bilan kengaytirilgan haqiqatga innovatsion aralashuv

Kataniya poliklinikasida Apple Vision Pro tijorat ko‘rish vositasi yordamida oftalmoplastika operatsiyasi o‘tkazildi...

3 may 2024

Bolalar uchun sahifalarni bo'yashning afzalliklari - barcha yoshdagilar uchun sehrli dunyo

Rang berish orqali nozik vosita ko'nikmalarini rivojlantirish bolalarni yozish kabi murakkabroq ko'nikmalarga tayyorlaydi. Rang berish uchun…

2 may 2024

Kelajak bu yerda: Yuk tashish sanoati global iqtisodiyotni qanday inqilob qilmoqda

Harbiy dengiz sektori 150 milliardlik bozorga yo'l olgan haqiqiy global iqtisodiy kuchdir...

1 may 2024

Noshirlar va OpenAI sun'iy intellekt tomonidan qayta ishlangan ma'lumotlar oqimini tartibga solish bo'yicha shartnomalar imzolaydilar.

O'tgan dushanba kuni Financial Times OpenAI bilan shartnoma imzolaganini e'lon qildi. FT o'zining jahon darajasidagi jurnalistikasini litsenziyalaydi...

30 Aprel 2024