أمان الويب / المتوسط: دفاعات المتصفح وتفسير البيانات / الدرس 10
CORS والأصول ووصول المتصفح بالاعتماد
حدد مشاركة الرد بين الأصول دون اعتبار سياسة المتصفح مصادقة أو حماية CSRF أو حداً بين الخوادم.
في هذه الصفحة
أهداف الدرس
- اشرح الطلب الفعلي والتمهيد والاعتماد وكشف الرد.
- استخدم سياسة أصل صريحة ورؤوساً تراعي المخبأ.
تضبط CORS قرار مشاركة في المتصفح
تحد سياسة الأصل الواحد وصول نص المتصفح لموارد أصول أخرى. تسمح CORS للخادم بإعلان مشاركة الرد التي قد يسمح بها المتصفح، ولا تصادق الحساب أو تفوض السجل أو تمنع كل طلب من الوصول. لا يصير غير المتصفح موثوقاً لرأس Origin. حدد سبب حاجة واجهة معينة للمورد ونموذج اعتمادها، وافصل ملف الموقع وقواعد رد الأصل. قراءة الرد وتنفيذ الفعل وصلاحية الجلسة خصائص مستقلة تحتاج أدلة مستقلة، لا نتيجة واحدة من رأس المشاركة.
اقرأ رؤوس المشاركة الصريحة بسياقها
يسمح الرد الخيالي بأصل محدد ومشاركة بالاعتماد. لا يقبل wildcard بدلاً من الأصل الدقيق لهذا الوصول وفق القواعد الحالية. لا تثبت الرؤوس أو ترسل هنا. تساعد Vary: Origin المخابئ على تمييز الاختيار الديناميكي، ويبقى للخاص إذنه وسياسة مخبئه. لا تعكس كل Origin كأن الانعكاس قائمة سماح. يشمل الأصل البروتوكول والمنفذ غير الافتراضي، لا مساراً أو لاحقة صفحة. يلزم ضبط هذه التفاصيل في التكامل الفعلي لا الاكتفاء باسم النطاق.
Access-Control-Allow-Origin: https://portal.example.invalid
Access-Control-Allow-Credentials: true
Vary: Origin
حقول توضيحية لأصل خيالي واحد، لا إعداد خادم كامل. لا تتحقق من مستخدم أو تسمح بكل طريقة ورأس. لا يختبر عرضها سلوك متصفح أو وكيل أو مخبأ أو طلب.
افصل تفاوض القدرة عن الفعل
تحتاج بعض الطلبات تمهيداً يسأل عن صلاحية الطريقة والرؤوس قبل الفعل. للتعامل معه وعمر مخبئه واعتماده قواعد fetch ومتصفح موثقة، فلا تخمن من المسار العادي. السماح به لا يكمل تفويض الطلب الفعلي. قد يكون فشله تكاملاً أو سياسة، وقد يحدث حجب الرد بعد معالجة الخادم. شخّص المرحلة من دليل موجود مفوض، ولا تكرر طلباً يغير الحالة على خدمة حية كي يختفي تحذير الطرفية؛ فقد تكون الآثار حدثت بالفعل.
نمذج الانتماء الدقيق دون اتصال
تقبل الدالة أصلًا معلناً واحداً وترفض غير المدرج. لا تطبع URL اعتباطياً ولا تفحص DNS ولا تثبت أن متصفحاً ولد الرأس. استخدم في الحقيقي وسيطاً مصاناً بتحليل ورد مراجعين. اجعل القائمة دنيا ومملوكة ووضح التطوير والاختبار والإنتاج. يحتاج الأصل المعتم أو الغائب سياسة صريحة لا wildcard عرضياً. افصل CORS والهوية وإذن المورد، واختبر اختلاف الرد عبر المخبأ والوكيل الفعليين. نجاح العضوية النصية ليس اختباراً لتلك الطبقات.
APPROVED_ORIGINS = {"https://portal.example.invalid"}
def shared_origin(origin):
return origin if isinstance(origin, str) and origin in APPROVED_ORIGINS else None
assert shared_origin("https://portal.example.invalid") == "https://portal.example.invalid"
assert shared_origin("https://other.example.invalid") is None
assert shared_origin(None) is None
السلاسل وجهات خيالية محجوزة ولا ينفذ طلب. النتيجة قرار قائمة سماح فقط لا ادعاء هوية أو تنفيذ CORS كامل. يبقى سلوك الوسيط والمتصفح غير مختبر هنا.
تحقق من النجاح والرفض واختلاف المخبأ معاً
تحقق معزولاً ومفوضاً من أصل الواجهة ونمط الاعتماد والطرق والرؤوس والرد والتحويلات. افحص مصادقة الفعل وثبات الحالة عند رفض التعديل بصورة مستقلة. لا يثبت نجاح عميل الأوامر سلوك CORS في متصفح. احفظ تشخيصاً أدنى بلا أسرار وأجسام خاصة. راجع السياسة بمالك لا تعطيل المتصفح أو السماح للجميع لإصلاح تكامل. الهدف عقد مشاركة ضيق موثق، يُفهم نجاحه ورفضه معاً، وتبقى حدود ما لم يُختبر فيه ظاهرة للمراجعة.
الأخطاء الشائعة وإصلاحها
يعكس كل Origin كمعتمد
- لماذا يحدث؟
- اعتبر الانعكاس قائمة مراجعة.
- كيف تصلحه؟
- استخدم سياسة أصل ضيقة صريحة.
- كيف تتجنب تكراره؟
- اختبر المجهول والغائب والمقصود.
يسمى نجاح CORS تفويضاً
- لماذا يحدث؟
- اختلطت المشاركة بإذن البيانات.
- كيف تصلحه؟
- افرض الهوية والنطاق بالخادم.
- كيف تتجنب تكراره؟
- تحقق من المباشر مستقلاً.
يخلط المخبأ سياسة رد تعتمد الأصل
- لماذا يحدث؟
- نقص الاختلاف وسياسة الخاص.
- كيف تصلحه؟
- راجع Vary والمخبأ بمسار النشر.
- كيف تتجنب تكراره؟
- ضمّن اختلاف الأصل بالمخبأ.
اختبر فهمك
1. لماذا ينجح عميل الأوامر ولا يقرأ النص الرد؟
اعرض الحل المشروح
CORS سياسة مشاركة متصفح، فلا يمارس العميل غير المتصفحي إنفاذها نفسه. تحقق من الأصل والاعتماد والتمهيد ورؤوس الرد في بيئة متصفح مفوضة، مع إبقاء إذن الخادم منفصلاً. لا يثبت وصول البيانات بعميل آخر أن سياسة المشاركة خاطئة.
2. هل يفوض Allow-Credentials كل داخل من الأصل؟
اعرض الحل المشروح
لا؛ يشارك الرأس في قرار المتصفح بشأن مشاركة الرد المصادق. تظل الخدمة الفعلية مطالبة بالتحقق من الجلسة وتفويض المورد والفعل. لا يجعل السماح بأصل كل مستخدميه مخولين بقراءة جميع بيانات الخدمة.
أهم ما تعلمته
- CORS سياسة مشاركة رد متصفحية.
- يحتاج الاعتماد عقد أصل صريحاً متوافقاً.
- للتمهيد والفعل والمخبأ أدلة مستقلة.