تخطَّ إلى المحتوى

CORS Misconfiguration

إساءة إعداد مشاركة الموارد عبر النطاقات CORS Misconfiguration

CORS آلية تحدّد أي نطاقات يُسمح لها بقراءة استجابات موقعك من متصفّح؛ إعدادها الخاطئ (مثل السماح بأي نطاق مع تمرير بيانات اعتماد) يفتح بيانات المستخدم المسجَّل لأي موقع خارجي.

المتصفّح يمنع افتراضيًّا أي موقع من قراءة استجابة طلب لنطاق مختلف (سياسة المصدر الواحد) — CORS هي الآلية التي يستخدمها الخادم لفتح استثناءات محسوبة عبر ترويسة `Access-Control-Allow-Origin`. المشكلة تبدأ حين يعكس الخادم أي نطاق يرسله المتصفّح بترويسة `Origin` تلقائيًّا كنطاق مسموح — بدل التحقّق منه مقابل قائمة معروفة — خصوصًا إن كان الطلب يحمل كوكي جلسة المستخدم (`Access-Control-Allow-Credentials: true`).

بهذا الإعداد، أي موقع خبيث يستطيع تشغيل طلب من متصفّح ضحية مسجّلة دخولها بالفعل، والحصول على استجابة تحوي بياناتها الخاصّة — لأن الخادم "صادق" على نطاق المهاجم دون قصد.

الصياغة

Access-Control-Allow-Origin: *   // ❌ خطر إن اقترن بـ Allow-Credentials: true

📄 مثال

// ✅ آمن: تحقّق من نطاق الطلب مقابل قائمة بيضاء صريحة قبل الردّ
const ALLOWED_ORIGINS = new Set(["https://app.example.com"]);

const origin = req.headers.origin;
if (ALLOWED_ORIGINS.has(origin)) {
  res.setHeader("Access-Control-Allow-Origin", origin);
  res.setHeader("Access-Control-Allow-Credentials", "true");
}
// نطاق غير موجود بالقائمة: لا تُرسَل الترويسة إطلاقًا — المتصفّح يحجب القراءة

أهم النقاط

النقطةالوظيفة
Access-Control-Allow-Originالنطاق المسموح له بقراءة الاستجابة — يجب أن يكون قيمة محدّدة، لا انعكاسًا أعمى
Access-Control-Allow-Credentialsيسمح بإرسال كوكيز الجلسة مع الطلب العابر للنطاقات — يضاعف خطر أي إعداد خاطئ
* مع بيانات اعتمادالمتصفّح يرفض هذا المزيج فعليًّا — لكن انعكاس النطاق المُرسَل يحقّق نفس الأثر الخطر عمليًّا

💡 نصائح عملية

  • لا تُفعِّل CORS إلا للمسارات التي تحتاجه فعلًا — أغلب الـ API الداخلي بين خادمك وواجهته على نفس النطاق لا يحتاجه إطلاقًا

⚠️ أخطاء شائعة

  • نسخ إعداد "اسمح بكل شيء" من مثال توثيق سريع دون تعديله لبيئة إنتاج فيها بيانات مستخدمين حقيقية

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار CYBERSECURITY الكامل بالعربي.