الدفاع ضد CSRF بواسطة ملفات تعريف الارتباط مع خاصية SameSite

المصدر: https://portswigger.net/web-security/csrf/samesite-cookies

الدفاع ضد CSRF بواسطة ملفات تعريف الارتباط مع خاصية SameSite

تدافع بعض مواقع الوب ضد هجمات CSRF باستخدام ملفات تعريف الارتباط مع خاصية SameSite.

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

تتم إضافة خاصية SameSite إلى ترويسة الاستجابة (response) Set-Cookie عندما يصدر الخادم ملف تعريف ارتباط، و يمكن أن تأخذ هذه الخاصية إحدى القيمتين، Strict أو Lax. فمثلاً :

SetCookie: SessionId=sYMnfCUrAlmqVVZn9dqevxyFpKZt30NN; SameSite=Strict;
SetCookie: SessionId=sYMnfCUrAlmqVVZn9dqevxyFpKZt30NN; SameSite=Lax;

إذا تم تعيين خاصية SameSite كـ Strict ، فلن يقوم المستعرض بتضمين ملف تعريف الارتباط (cookie) في أي طلبات تنشأ من موقع آخر. و هذا هو الخيار الأقوى دفاعياً، و لكنه قد يضر بتجربة المستخدم، لأنه إذا اتبع المستخدم الذي قام بتسجيل الدخول رابطاً من جهة خارجية إلى موقع ما، فسيظهر عندئذٍ على أنه لم يقم بتسجيل الدخول و سيحتاج إلى تسجيل الدخول مرة أخرى قبل التفاعل مع الموقع بالطريقة المعتادة.

أما إذا تم تعيين خاصية SameSite كـ Lax ، فسيقوم المتصفح بتضمين ملف تعريف الارتباط في الطلبات التي تنشأ من موقع آخر و لكن فقط في حالة استيفاء شرطين:

  • يستخدم الطلب طريقة GET. لن تتضمن الطلبات ذات الطرق الأخرى، مثلPOST ، ملف تعريف الارتباط.
  • نتج الطلب عن تنقل على مستوى عالٍ بواسطة المستخدم، مثل النقر فوق رابط معين. أما الطلبات الأخرى، مثل الطلبات التي يتم إنشاؤها من خلال البرامج النصية (scripts)، فلن تتضمن ملف تعريف الارتباط (cookie).

إن استخدام ملفات تعريف الارتباط مع خاصية SameSite في وضع Lax يوفر دفاعاً جزئياً ضد هجماتCSRF ، نظراً لأن إجرائيات المستخدم التي تستهدفها هجمات CSRF يتم تنفيذها غالباً باستخدام طريقة POST. و هنا لا بد من الإشارة إلى نقطتي ضعف هامتين :

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

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