محتويات الدورة

أمان الويب / المتوسط: دفاعات المتصفح وتفسير البيانات / الدرس 9

CSRF وأصالة الطلب

احمِ طلب المتصفح المغير للحالة وفق نموذج الاعتماد الفعلي ولا تخلط CORS أو HttpOnly أو المصادقة بقصد المستخدم.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • حدد حاجة الاعتماد التلقائي لدفاع أصالة الطلب.
  • راجع الرمز والأصل وSameSite وتكامل المسار منفصلة.

افصل الجلسة الصالحة عن الفعل المقصود

قد يرفق المتصفح اعتماداً بطلب وفق قواعد الملف وfetch دون قصد المستخدم للفعل. تساعد دفاعات CSRF على فصل المسار المشروع من بدء غير مرغوب بين المواقع وفق نموذج الجلسة. تبقى المصادقة وإذن المورد مطلوبين ولا يثبتان وحدهما أصل الطلب أو مساره المقصود. استخدم الطرق المناسبة للتغيير، لا GET الآمن لمهمة حساسة. افهم الملف المرسل تلقائياً أو الرمز الصريح أو الآلية الأخرى في العميل الحقيقي قبل نسخ دفاع من معمارية مختلفة.

استخدم آلية الرمز المراجعة في الإطار

لرمز المزامنة أو الإرسال المزدوج المصمم متطلبات خاصة بالتوليد والربط والنقل والتحقق. فضل وسيط الإطار المصان وتكامله الموثق لا رمزاً من معرّف متوقع. لا تضع الرموز الخاصة في URL أو سجل عادي. يسجل المثال الأسئلة دون اعتماد أو مسار. لا يكفي وجود الرمز إن لم يتحققه التطبيق بسياق موثوق. قد تلائم إعادة المصادقة أو التأكيد الأفعال شديدة الحساسية، لكن تدمج بقصد لا لتعويض دفاع أساسي غائب.

json سجل تصميم اصطناعي لأصالة الطلب
{
  "operation": "update-private-note",
  "credentialModel": "browser-session-cookie",
  "tokenMechanism": "reviewed-framework-integration",
  "tokenBinding": "validated-session-context",
  "originPolicy": "explicit-allowed-workflow",
  "denyEffect": "no-mutation",
  "containsToken": false
}

يوثق الملف المتطلبات فقط، ولا يحوي رمزاً أو ينشئ طلب متصفح أو جلسة أو سياسة خادم. ما زال رمز الإطار وتكامل الوكيل والمضيف بحاجة اختبار مفوض.

أعطِ إشارة المتصفح دورها المحدود

قد يدعم Origin أو وصف الطلب سياسة مصدر مراجعة، لكن الغائب والمعتم والمحول يحتاج معالجة صريحة للمسار المدعوم. يهم الوكيل الموثوق في إعادة أصل الوجهة. تقلل SameSite بعض إرسال الاعتماد بين المواقع، لكن الموقع ليس الأصل وتهم الأعمال والتوافق. تقيد HttpOnly قراءة الملف لا أصالة الطلب. تضبط CORS كشف الرد للمتصفح وليست دفاع CSRF عاماً. قد يقوض XSS افتراضات العميل، فاحفظ المخرج الآمن والإذن كحدين مكملين لا بديلين.

اختبر قاعدة مقارنة اصطناعية صريحة

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

python بيئة كاملة لمقارنة علامات دون اتصال
import hmac

def csrf_fixture(expected, presented, origin_reviewed):
    if not isinstance(expected, bytes) or not isinstance(presented, bytes):
        return False
    return origin_reviewed and hmac.compare_digest(expected, presented)

marker = b"public-synthetic-marker-not-a-token"
assert csrf_fixture(marker, marker, True)
assert not csrf_fixture(marker, b"other-public-marker", True)
assert not csrf_fixture(marker, marker, False)

كل البايتات عامة اصطناعية وتثبت التأكيدات نتائج المقارنة المعلنة فقط. لا يصدر رمز أو تصادق جلسة أو يرسل طلب تغيير حالة.

تحقق من النموذج الشرعي والتعديل المرفوض معاً

يسمح الدفاع الصحيح بالمسار المصادق المقصود ويرفض غير المدعوم بلا تعديل. تحقق من موضع الرمز والمحلل ونوع المحتوى وتغير الجلسة والنموذج المنتهي والألسنة المتعددة والتعافي مفوضاً ومعزولاً. لا تعطل عالمياً لفشل نموذج شرعي؛ تتبع الاختلاف وأصلح التكامل الضيق. قدم رداً مفيداً دون الرموز، وسجل المتصفح والإطار والإعداد. تحمى مسارات API والخلفية وفق اعتمادها. تختبر الدورة بيانات محلية سليمة لا هجوماً تشغيلياً أو موقعاً حياً.

الأخطاء الشائعة وإصلاحها

يتوقع من HttpOnly منع الفعل غير المرغوب

لماذا يحدث؟
اختلطت القراءة والإرسال.
كيف تصلحه؟
استخدم آلية الأصالة المناسبة.
كيف تتجنب تكراره؟
راجع نطاق كل ضبط.

يفشل نموذج مشروع فتعطل الحماية

لماذا يحدث؟
استبدل التشخيص بتجاوز عام.
كيف تصلحه؟
تتبّع الرمز والجلسة والأصل وأصلح الضيق.
كيف تتجنب تكراره؟
احفظ اختبارات السماح والرفض.

تعدل الطلبات المرفوضة البيانات

لماذا يحدث؟
جاء التحقق بعد الأثر.
كيف تصلحه؟
افرض القرار قبل التعديل.
كيف تتجنب تكراره؟
افحص الثبات عند الفشل.

اختبر فهمك

1. تخفي CORS الرد عن أصل آخر. هل تثبت عدم وصول التغيير؟

اعرض الحل المشروح

لا؛ يختلف كشف الرد بالمتصفح عن تنفيذ الطلب بالخادم. طبق دفاعات CSRF المناسبة للاعتماد وسير العمل الفعليين، وتحقق من عدم حدوث أثر محمي عند الرفض. لا يحسم تحذير CORS وحده ما إذا كانت عملية تغيير وصلت أو نُفذت.

2. لماذا ليست العلامة العامة نظام رموز إنتاج؟

اعرض الحل المشروح

يفتقد المثال التوليد السري وربط الجلسة وتكامل النقل والسياق الموثوق ودورة الإنفاذ. يوضح سياسة مقارنة واحدة فقط. استخدم آليات إطار مصانة، ثم تحقق من سلوك المسار كاملاً مستقلاً بدلاً من ترقية العلامة العامة إلى اعتماد فعلي.

أهم ما تعلمته

  • لا تثبت الجلسة قصد الطلب.
  • ليست الرموز والأصل وSameSite وCORS وHttpOnly بدائل.
  • يسبق الرفض الأثر المحمي.

المراجع الرسمية