FixVibe
Covered by FixVibehigh

حماية CSRF: الدفاع ضد تغييرات الحالة غير المصرح بها

لا يزال تزوير الطلبات عبر المواقع (CSRF) يمثل تهديدًا كبيرًا لتطبيقات الويب. يستكشف هذا البحث كيفية قيام أطر العمل الحديثة مثل Django بتنفيذ الحماية وكيف توفر السمات على مستوى المتصفح مثل SameSite دفاعًا متعمقًا ضد الطلبات غير المصرح بها.

CWE-352

التأثير

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

السبب الجذري

السبب الأساسي لـ CSRF هو السلوك الافتراضي لمتصفح الويب المتمثل في إرسال ملفات تعريف الارتباط المرتبطة بالمجال كلما تم تقديم طلب إلى هذا المجال، بغض النظر عن أصل الطلب [S1]. بدون التحقق المحدد من أن الطلب قد تم تشغيله عمدًا من واجهة المستخدم الخاصة بالتطبيق، لا يمكن للخادم التمييز بين إجراء المستخدم الشرعي والإجراء المزيف.

آليات حماية جانغو CSRF

يوفر Django نظام دفاع مدمج للتخفيف من هذه المخاطر من خلال تكامل البرامج الوسيطة والقالب [S2].

تفعيل البرامج الوسيطة

يعد django.middleware.csrf.CsrfViewMiddleware مسؤولاً عن حماية CSRF ويتم تمكينه عادةً بشكل افتراضي [S2]. يجب وضعه قبل أي برنامج وسيط للعرض يفترض أن هجمات CSRF قد تم التعامل معها بالفعل من قبل [S2].

تنفيذ القالب

بالنسبة لأي نماذج POST داخلية، يجب على المطورين تضمين علامة {% csrf_token %} داخل عنصر <form> [S2]. يضمن ذلك تضمين رمز مميز وسري فريد في الطلب، والذي يتحقق الخادم بعد ذلك من صحته مقابل جلسة المستخدم.

مخاطر تسرب الرمز المميز

أحد تفاصيل التنفيذ الهامة هو أنه لا ينبغي أبدًا تضمين {% csrf_token %} في النماذج التي تستهدف عناوين URL الخارجية [S2]. سيؤدي القيام بذلك إلى تسريب رمز CSRF السري إلى طرف ثالث، مما قد يعرض أمان جلسة المستخدم [S2] للخطر.

الدفاع على مستوى المتصفح: ملفات تعريف الارتباط SameSite

قدمت المتصفحات الحديثة سمة SameSite لرأس Set-Cookie لتوفير طبقة من الدفاع المتعمق [S1].

  • صارم: يتم إرسال ملف تعريف الارتباط فقط في سياق الطرف الأول، مما يعني أن الموقع الموجود في شريط URL يطابق مجال ملف تعريف الارتباط [S1].
  • Lax: لا يتم إرسال ملف تعريف الارتباط عند الطلبات الفرعية عبر المواقع (مثل الصور أو الإطارات) ولكن يتم إرساله عندما ينتقل المستخدم إلى الموقع الأصلي، مثل اتباع الرابط القياسي [S1].

كيفية اختبار FixVibe لذلك

يتضمن FixVibe الآن حماية CSRF كفحص نشط مسور. بعد التحقق من النطاق، يقوم active.csrf-protection بفحص نماذج تغيير الحالة المكتشفة، والتحقق من المدخلات على شكل رمز CSRF وإشارات ملفات تعريف الارتباط SameSite، ثم يحاول إرسال مصدر مزيف منخفض التأثير ويقدم التقارير فقط عندما يقبله الخادم. تشير عمليات فحص ملفات تعريف الارتباط أيضًا إلى سمات SameSite الضعيفة التي تقلل من عمق دفاع CSRF.