بضائع

أمان الويب في Laravel: ما هو تزوير الطلبات عبر المواقع (CSRF)؟

في هذا البرنامج التعليمي من Laravel ، نتحدث عن أمان الويب وكيفية حماية تطبيق الويب من التزوير عبر الموقع أو هجمات CSRF.

CSRF هو نشاط ضار يقوم به مهاجم ، يقوم بتنفيذ إجراءات نيابة عن مستخدم مصادق عليه ، مما يضر بأمان الويب. لحسن الحظ ، يوفر Laravel الأدوات اللازمة لمنع هذا النوع من الضعف.

ما هو CSRF؟

يهاجم CSRF جلسات اختطاف المستخدم. يفعلون ذلك عن طريق خداع المستخدم لتقديم طلب عبر علامات النماذج المخفية أو عناوين URL الضارة (الصور أو الروابط) دون علم المستخدم.

يؤدي هذا الهجوم إلى تغيير في حالة جلسة المستخدم ، وتسرب البيانات ، وفي بعض الأحيان يمكن للمتسللين التلاعب ببيانات المستخدم النهائي في أحد التطبيقات.

توضح الصورة أعلاه سيناريو يتم فيه اختراق أمان الويب. ترسل الضحية طلبًا عن طريق النقر فوق ارتباط (مستلم) ، وإرسال طلب إلى خادم موقع الويب الذي سينتج التأثيرات التي يرغبها المتسلل ، الذي يمتلك المعلومات المفيدة للوصول إلى خادم موقع الويب والتلاعب به.

كيفية منع طلبات CSRF

لتحسين أمن ويب تطبيقاتك ، في كل جلسة مستخدم ، يُنشئ Laravel رموزًا آمنة يستخدمها لضمان أن المستخدم المصادق عليه هو الذي يطلب التطبيق.

نظرًا لأن هذا الرمز المميز يتغير في كل مرة يتم فيها إعادة إنشاء جلسة المستخدم ، لا يمكن للمهاجم الوصول إليها.

كلما كان هناك طلب لتغيير معلومات المستخدم على جانب الخادم (الخلفية) مثل POSTPUTPATCHDELETE، يجب عليك تضمين التوجيه @csrf في نموذج الطلب blade لغة البرمجة. ال @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 يلقي رسالة خطأ "Page Expired" برمز الحالة 419.

كيف وأين يتم التحقق من CSRF

الوسيطة VerifyCsrfToken يتعامل مع التحقق من CSRF داخل تطبيق Laravel. ال middleware مسجل في Kernel.php ويقع في الدليل app/Http/Middleware. هذا يعني أن ملف middleware يتم تشغيله للطلبات داخل الويب ، لا تتعلق بواجهات برمجة التطبيقات.

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

النشرة الإخبارية
لا تفوّت أهم أخبار الابتكار. قم بالتسجيل لتلقيهم عن طريق البريد الإلكتروني.

المقالات الأخيرة

المستقبل هنا: كيف تُحدث صناعة الشحن ثورة في الاقتصاد العالمي

يعد القطاع البحري قوة اقتصادية عالمية حقيقية، وقد اتجه نحو سوق يبلغ حجمه 150 مليارًا...

1 مايو 2024

يوقع الناشرون وOpenAI اتفاقيات لتنظيم تدفق المعلومات التي تتم معالجتها بواسطة الذكاء الاصطناعي

أعلنت صحيفة فاينانشيال تايمز يوم الاثنين الماضي عن صفقة مع OpenAI. "فاينانشيال تايمز" ترخص صحافتها ذات المستوى العالمي...

أبريل 30 2024

المدفوعات عبر الإنترنت: إليك كيف تجعلك خدمات البث تدفع إلى الأبد

يدفع الملايين من الأشخاص مقابل خدمات البث، ويدفعون رسوم الاشتراك الشهرية. من الشائع أنك…

أبريل 29 2024

يتميز Veeam بالدعم الأكثر شمولاً لبرامج الفدية، بدءًا من الحماية وحتى الاستجابة والاسترداد

سوف تستمر شركة Coveware by Veeam في تقديم خدمات الاستجابة لحوادث الابتزاز السيبراني. ستوفر Coveware إمكانات الطب الشرعي والمعالجة...

أبريل 23 2024

اقرأ الابتكار بلغتك

النشرة الإخبارية
لا تفوّت أهم أخبار الابتكار. قم بالتسجيل لتلقيهم عن طريق البريد الإلكتروني.

تابعنا