مقالات

Laravel ويب سيڪيورٽي: ڪراس-سائيٽ درخواست جي جعلسازي (CSRF) ڇا آهي؟

هن Laravel ٽيوٽوريل ۾ اسان ڳالهائينداسين ويب سيڪيورٽي جي باري ۾ ۽ ڪئين ويب ايپليڪيشن کي ڪراس سائٽ درخواست جي جعلسازي يا CSRF حملن کان ڪيئن بچائڻ لاءِ.

CSRF هڪ بدسلوڪي سرگرمي آهي جيڪو هڪ حملي ڪندڙ طرفان ڪيو ويندو آهي، جيڪو هڪ تصديق ٿيل صارف جي طرفان ڪم ڪري ٿو، ويب سيڪيورٽي لاءِ نقصانڪار آهي. خوشقسمتيء سان، Laravel هن قسم جي خطري کي روڪڻ لاء اوزار مهيا ڪري ٿو.

CSRF ڇا آهي؟

CSRF حملن کي اغوا ڪندڙ صارف سيشن. اهي اهو ڪندا آهن هڪ صارف کي لڪائڻ جي ذريعي درخواست جمع ڪرڻ ۾ پوشیدہ فارم ٽيگ يا بدسلوڪي URLs (تصويرون يا لنڪس) صارف جي ڄاڻ کان سواء.

اهو حملو صارف جي سيشن جي حالت ۾ تبديلي جي ڪري ٿي، ڊيٽا ليڪ، ۽ ڪڏهن ڪڏهن هيڪرز هڪ ايپليڪيشن ۾ آخري صارف جي ڊيٽا کي هٽائي سگهن ٿا.

مٿي ڏنل تصوير هڪ منظر بيان ڪري ٿي جتي ويب سيڪيورٽي جي ڀڃڪڙي ڪئي وئي آهي. مقتول هڪ لنڪ تي ڪلڪ ڪري درخواست موڪلي ٿو (وصول ٿيل)، هڪ ويب سائيٽ سرور ڏانهن هڪ درخواست موڪلي ٿو جيڪو هيڪر پاران گهربل اثر پيدا ڪندو، جيڪو ويب سائيٽ سرور تائين رسائي ۽ استعمال ڪرڻ لاء مفيد معلومات جي قبضي ۾ اچي ٿو.

CSRF درخواستن کي ڪيئن روڪيو

کي بهتر ڪرڻ لاء سيڪيورٽي توهان جي ايپليڪيشنن جي ويب، هر يوزر سيشن ۾، Laravel محفوظ ٽوڪن ٺاهي ٿو جنهن کي اهو يقيني بڻائڻ لاءِ استعمال ڪري ٿو ته تصديق ٿيل صارف اهو ئي آهي جيڪو ايپليڪيشن جي درخواست ڪري ٿو.

ڇاڪاڻ ته هي ٽوڪن هر وقت تبديل ٿئي ٿو جڏهن هڪ صارف سيشن ٻيهر پيدا ٿئي ٿو، هڪ حملو ڪندڙ ان تائين رسائي نٿو ڪري سگهي.

جڏهن ته سرور سائڊ (backend) وانگر صارف جي معلومات کي تبديل ڪرڻ جي درخواست آهي POSTPUTPATCHDELETE، توھان کي ھدايت شامل ڪرڻ گھرجي @csrf درخواست فارم ۾ blade HTML. جي @csrf تنهن ڪري اهو هڪ هدايت آهي Blade ايپليڪيشن پاران تصديق ٿيل لڪيل ٽوڪن ٺاهڻ لاءِ استعمال ڪيو ويو.

هدايت Blade Laravel ٽيمپليٽ انجڻ جي اندر استعمال ٿيل نحو سڏيو ويندو آهي پکن . فائل ٺاهڻ لاءِ blade توھان کي اھو نالو ڏيڻو پوندو - اسان جي صورت ۾ - بليڊ جي واڌ جي پٺيان. ان جو مطلب آهي ته فائل جو نالو هوندو form.blade.php.

فائل استعمال ٿيل آهي blade ويب پيج تي استعمال ڪندڙن لاءِ ڏيک ڏيڻ لاءِdefiنائيٽ يا بليڊ شارٽ هينڊ نحو جيڪو توهان استعمال ڪري سگهو ٿا. مثال طور، @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 Laravel ايپليڪيشن ۾ CSRF جي تصديق کي سنڀاليندو آهي. جي middleware ۾ رجسٽر ٿيل آهي Kernel.php ۽ ڊاريڪٽري ۾ واقع آهي app/Http/Middleware. هن جو مطلب آهي ته middleware اهو ويب جي اندر درخواستن لاءِ شروع ڪيو ويو آهي، APIs سان لاڳاپيل ناهي.

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 ۾ ٺهيل آهي موازنہ ڪرڻ لاءِ جيڪڏهن ٻئي تار برابر آهن. هن آپريشن جو نتيجو هميشه آهي بول (سچو) يا (غلط) .

Ercole Palmeri

جدت نيوز ليٽر
جدت تي سڀ کان اهم خبر نه وڃايو. انهن کي اي ميل ذريعي حاصل ڪرڻ لاء سائن اپ ڪريو.

تازيون مضمونون

Augmented Reality ۾ جديد مداخلت، ڪيٽينيا پولي ڪلينڪ ۾ ايپل ناظر سان

ڪيٽينيا پولي ڪلينڪ ۾ ايپل ويزن پرو ڪمرشل ناظر استعمال ڪندي هڪ چشمي جو آپريشن ڪيو ويو…

3 2024

ٻارن لاءِ رنگين صفحن جا فائدا - سڀني عمرن لاءِ جادوءَ جي دنيا

رنگ سازي ذريعي سٺي موٽر صلاحيتن کي ترقي ڪرڻ ٻارن کي وڌيڪ پيچيده صلاحيتن لاء تيار ڪري ٿو جهڙوڪ لکڻ. رنگ ڏيڻ…

2 2024

مستقبل هتي آهي: ڪيئن شپنگ انڊسٽري عالمي معيشت ۾ انقلاب آڻيندي آهي

بحري شعبي هڪ حقيقي عالمي معاشي طاقت آهي، جيڪا 150 بلين مارڪيٽ جي طرف نيويگيٽ ڪئي آهي ...

1 2024

پبلشرز ۽ OpenAI مصنوعي ذهانت پاران پروسيس ڪيل معلومات جي وهڪري کي منظم ڪرڻ لاءِ معاهدن تي دستخط ڪن ٿا

گذريل سومر، فنانشل ٽائمز OpenAI سان هڪ ڊيل جو اعلان ڪيو. ايف ٽي پنهنجي عالمي سطح جي صحافت کي لائسنس ڏئي ٿو ...

30 اپريل 2024

پنھنجي ٻوليءَ ۾ جدت پڙھو

جدت نيوز ليٽر
جدت تي سڀ کان اهم خبر نه وڃايو. انهن کي اي ميل ذريعي حاصل ڪرڻ لاء سائن اپ ڪريو.

اسان جي تابعداري ڪريو