الحماية من CSRF
أنشئوا رموز CSRF وتحققوا منها في النماذج لمنع الطلبات المزوّرة
الحماية من CSRF درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.
ما المقصود بـ CSRF؟
يخدع تزوير الطلبات عبر المواقع (CSRF) المستخدمين المصادق عليهم لإرسال إجراءات غير مرغوبة. إذ ترسل صفحة ضارة طلبًا مزورًا إلى موقعك باستخدام جلسة الضحية النشطة.
آلية عمل CSRF
السيناريو: سجّلت Alice الدخول إلى bank.com. ثم تزور malicious.com التي تحتوي على نموذج مخفي يرسل تلقائيًا طلب تحويل إلى bank.com باستخدام ملف تعريف ارتباط جلستها.
رموز CSRF
يتمثل الدفاع في رمز سري خاص بكل جلسة، مضمّن في كل نموذج. يتحقق الخادم من الرمز في طلبات POST/PUT/PATCH/DELETE، ولا يستطيع طلب مزور من مصدر آخر قراءة الرمز.
@csrf في Laravel Blade
أضف التوجيه @csrf إلى كل نموذج HTML يغيّر البيانات.
<form method="POST" action="/transfer">
@csrf
<input name="amount" type="number">
<button>Transfer</button>
</form>البرمجيات الوسيطة لـ CSRF
تتحقق البرمجية الوسيطة VerifyCsrfToken في Laravel من الرأس X-CSRF-TOKEN أو الحقل _token في جميع الطلبات غير GET ضمن مجموعة البرمجيات الوسيطة web.
CSRF مع AJAX
بالنسبة إلى طلبات AJAX، اقرأ الرمز من وسم meta وأرسله في رأس.
// In the HTML head:
<meta name="csrf-token" content="{{ csrf_token() }}">
// In JavaScript (Axios):
axios.defaults.headers.common["X-CSRF-TOKEN"] =
document.querySelector("meta[name=csrf-token]").content;استثناء المسارات
تُستثنى مسارات API التي تستخدم رموز Sanctum عادةً من الحماية ضد CSRF، لأنها تستخدم مصادقة قائمة على الرموز بدلًا من ملفات تعريف الارتباط.
<?php
// In VerifyCsrfToken $except:
protected $except = [
"api/*",
"webhooks/*",
];سمة SameSite لملف تعريف الارتباط
يوفر ضبط SameSite=Strict أو Lax في ملف تعريف ارتباط الجلسة طبقة دفاع إضافية ضد CSRF في المتصفحات الحديثة.
نمط ملف تعريف الارتباط ذي الإرسال المزدوج
دفاع بديل ضد CSRF لواجهات API: أرسل الرمز في كل من ملف تعريف الارتباط ورأس الطلب. ويتحقق الخادم من تطابقهما، إذ لا تستطيع الطلبات من مصدر آخر قراءة ملفات تعريف الارتباط.
CSRF في سياق API
لا تكون واجهات REST API التي تصادق باستخدام رموز Bearer، مثل Sanctum وJWT، عرضةً لـ CSRF، لأن الرموز تُخزَّن في localStorage ولا يرسلها المتصفح تلقائيًا.
اختبار CSRF
تُدرج أدوات اختبار Laravel رموز CSRF تلقائيًا. ويمكنك أيضًا اختبار رفض طلبات POST غير المحمية.
<?php
// With token:
$this->post("/transfer", ["_token" => csrf_token(), "amount" => 100]);
// Simulating CSRF attack (no token):
$this->withoutMiddleware(VerifyCsrfToken::class)->post("/transfer", [...]);الملخص
تتطلب الحماية من CSRF وجود رمز مخفي في كل نموذج يغيّر حالة النظام. يتولى Laravel ذلك تلقائيًا باستخدام @csrf. وبالنسبة إلى AJAX، أضف الرمز كرأس HTTP. ولا تتأثر مسارات API التي تستخدم رموز Bearer.
تحقق سريع
كيف تضيف الحماية من CSRF إلى نموذج Laravel Blade؟
الأسئلة الشائعة
هل درس «الحماية من CSRF» مجاني؟
نعم — نص درس «الحماية من CSRF» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.
ماذا ستتعلم في «الحماية من CSRF»؟
أنشئوا رموز CSRF وتحققوا منها في النماذج لمنع الطلبات المزوّرة تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟
لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «الحماية من CSRF»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟
نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- منع البرمجة النصية عبر المواقع (XSS)
- حقن SQL والاستعلامات ذات المعاملات
- الحماية من CSRF
- تخزين كلمات المرور بأمان