CSRF هو نشاط ضار يقوم به مهاجم ، يقوم بتنفيذ إجراءات نيابة عن مستخدم مصادق عليه ، مما يضر بأمان الويب. لحسن الحظ ، يوفر Laravel الأدوات اللازمة لمنع هذا النوع من الضعف.
يهاجم CSRF جلسات اختطاف المستخدم. يفعلون ذلك عن طريق خداع المستخدم لتقديم طلب عبر علامات النماذج المخفية أو عناوين URL الضارة (الصور أو الروابط) دون علم المستخدم.
يؤدي هذا الهجوم إلى تغيير في حالة جلسة المستخدم ، وتسرب البيانات ، وفي بعض الأحيان يمكن للمتسللين التلاعب ببيانات المستخدم النهائي في أحد التطبيقات.
توضح الصورة أعلاه سيناريو يتم فيه اختراق أمان الويب. ترسل الضحية طلبًا عن طريق النقر فوق ارتباط (مستلم) ، وإرسال طلب إلى خادم موقع الويب الذي سينتج التأثيرات التي يرغبها المتسلل ، الذي يمتلك المعلومات المفيدة للوصول إلى خادم موقع الويب والتلاعب به.
لتحسين أمن ويب تطبيقاتك ، في كل جلسة مستخدم ، يُنشئ Laravel رموزًا آمنة يستخدمها لضمان أن المستخدم المصادق عليه هو الذي يطلب التطبيق.
نظرًا لأن هذا الرمز المميز يتغير في كل مرة يتم فيها إعادة إنشاء جلسة المستخدم ، لا يمكن للمهاجم الوصول إليها.
كلما كان هناك طلب لتغيير معلومات المستخدم على جانب الخادم (الخلفية) مثل POST
, PUT
, PATCH
e DELETE
، يجب عليك تضمين التوجيه @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.
الوسيطة 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 متطابقة.
تقوم الوظيفة بأمرين:
$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 مليارًا...
أعلنت صحيفة فاينانشيال تايمز يوم الاثنين الماضي عن صفقة مع OpenAI. "فاينانشيال تايمز" ترخص صحافتها ذات المستوى العالمي...
يدفع الملايين من الأشخاص مقابل خدمات البث، ويدفعون رسوم الاشتراك الشهرية. من الشائع أنك…
سوف تستمر شركة Coveware by Veeam في تقديم خدمات الاستجابة لحوادث الابتزاز السيبراني. ستوفر Coveware إمكانات الطب الشرعي والمعالجة...