4 أساسيات Laravel 11: حماية CSRF

التزوير عبر المواقع (CSRF) هو نوع من الاستغلال الضار حيث يتم تنفيذ أوامر غير مصرح بها نيابة عن مستخدم مصدق. يجعل Laravel من السهل حماية تطبيقك من هجمات CSRF.
مقدمة عن حماية CSRF
تستغل هجمات CSRF الثقة التي يضعها الموقع في متصفح المستخدم. يقوم Laravel تلقائيًا بإنشاء رمز CSRF لكل جلسة مستخدم نشطة. يتم استخدام هذا الرمز للتحقق من أن المستخدم المصدق هو الشخص الذي يقوم بالفعل بإرسال الطلبات.
منع طلبات CSRF
يقوم Laravel تلقائيًا بإنشاء رمز CSRF لكل جلسة مستخدم نشطة. يتم استخدام هذا الرمز للتحقق من أن المستخدم المصدق هو الشخص الذي يقوم بالفعل بإرسال الطلبات إلى التطبيق.
يمكنك الوصول إلى رمز CSRF للجلسة الحالية عبر جلسة الطلب أو وظيفة المساعد csrf_token
:
use Illuminate\Http\Request;
Route::get('/token', function (Request $request) {
$token = $request->session()->token();
$token = csrf_token();
// ...
});
في أي وقت تقوم فيه بتعريف نموذج HTML لـ "POST" أو "PUT" أو "PATCH" أو "DELETE" في تطبيقك، يجب عليك تضمين حقل CSRF _token
المخفي في النموذج حتى يتمكن middleware حماية CSRF من التحقق من الطلب. لراحتك، يمكنك استخدام توجيه Blade @csrf
لتوليد حقل الرمز المخفي:
<form method="POST" action="/profile">
@csrf
<!-- حقول النموذج -->
</form>
سيقوم middleware ValidateCsrfToken
، المضمن في مجموعة middleware web
افتراضيًا، بالتحقق تلقائيًا من أن الرمز في إدخال الطلب يتطابق مع الرمز المخزن في الجلسة.
رموز CSRF وتطبيقات SPA
إذا كنت تبني تطبيق SPA يستخدم Laravel كخلفية API، فاستشر وثائق Laravel Sanctum للحصول على معلومات حول المصادقة مع API الخاص بك وحماية ضد نقاط الضعف في CSRF.
استثناء URIs من حماية CSRF
في بعض الأحيان قد ترغب في استثناء URIs معينة من حماية CSRF. على سبيل المثال، إذا كنت تستخدم Stripe لمعالجة المدفوعات وتستخدم نظام الويب هوك الخاص بهم، فستحتاج إلى استثناء مسار معالج ويب هوك Stripe من حماية CSRF. يمكنك القيام بذلك عن طريق توفير URIs لطريقة validateCsrfTokens
في ملف bootstrap/app.php
لتطبيقك:
->withMiddleware(function (Middleware $middleware) {
$middleware->validateCsrfTokens(except: [
'stripe/*',
'http://example.com/foo/bar',
'http://example.com/foo/*',
]);
});
X-CSRF-TOKEN
بالإضافة إلى التحقق من رمز CSRF كمعامل POST، سيقوم middleware ValidateCsrfToken
أيضًا بالتحقق من عنوان الطلب X-CSRF-TOKEN
. يمكنك، على سبيل المثال، تخزين الرمز في علامة HTML meta:
<meta name="csrf-token" content="{{ csrf_token() }}">
ثم يمكنك إرشاد مكتبة مثل jQuery لإضافة الرمز تلقائيًا إلى جميع عناوين الطلبات. يوفر هذا حماية بسيطة ومريحة لـ CSRF لتطبيقات AJAX الخاصة بك باستخدام تقنية JavaScript القديمة:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
X-XSRF-TOKEN
يخزن Laravel رمز CSRF الحالي في ملف تعريف ارتباط مشفر XSRF-TOKEN
يتم تضمينه مع كل استجابة يتم إنشاؤها بواسطة الإطار. يمكنك استخدام قيمة ملف تعريف الارتباط لتعيين عنوان الطلب X-XSRF-TOKEN
. يتم إرسال هذا ملف تعريف الارتباط بشكل أساسي كراحة للمطور نظرًا لأن بعض أطر عمل JavaScript والمكتبات، مثل Angular و Axios، تضع قيمته تلقائيًا في عنوان X-XSRF-TOKEN
في الطلبات ذات الأصل نفسه.
تعرف على المزيد حول حماية CSRF من التوثيق الرسمي لـ Laravel.
خاتمة
حماية CSRF أمر أساسي لتأمين تطبيقات الويب. غطى هذا البرنامج التعليمي كيفية استخدام رموز CSRF في Laravel 11 لحماية تطبيقك من هجمات CSRF. لمزيد من المعلومات التفصيلية، راجع التوثيق الرسمي لـ Laravel.
تمنياتنا ببرمجة سعيدة مع Laravel 11!
ناقش مشروعك معنا
نحن هنا للمساعدة في احتياجات تطوير الويب الخاصة بك. حدد موعدًا لمناقشة مشروعك وكيف يمكننا مساعدتك.
دعنا نجد أفضل الحلول لاحتياجاتك.