لماذا لا يفهم المطورون CORS
يُعد CORS أحد أكثر الأدوات الأمنية التي يُساء فهمها في تطوير الويب. يعتقد العديد من المطورين أنه يحمي خادمهم، لكنه لا يفعل ذلك.
CORS يحمي المستخدم.
يفرض المتصفح سياسة الأصل الواحد (Same-Origin Policy - SOP). تمنع هذه السياسة المواقع الخبيثة من إرسال طلبات إلى موقع آخر نيابة عنك. CORS هو ببساطة الطريقة التي يخبر بها الخادم المتصفح بتخفيف تلك القاعدة لمواقع محددة.
إذا كان طلبك يعمل في Postman ولكنه يفشل في المتصفح، فأنت تواجه مشكلة CORS. Postman ليس متصفحًا، لذا فهو لا يفرض هذه القواعد.
أخطاء شائعة يجب عليك تجنبها:
- استخدام CORS كأمان وحيد لك. CORS ليس وسيلة للمصادقة (authentication). لا تزال بحاجة إلى الرموز (tokens)، وكلمات المرور، وتحديد معدل الطلبات (rate limiting).
- فخ العلامة العامة (wildcard). لا يمكنك استخدام
Access-Control-Allow-Origin: *إذا كنت بحاجة إلى إرسال ملفات تعريف الارتباط (cookies) أو بيانات الاعتماد (credentials). يجب عليك إدراج النطاق (domain) بدقة. - تجاهل طلبات preflight. ترسل المتصفحات طلب
OPTIONSتلقائيًا قبل العديد من استدعاءات API. إذا كان خادمك يحظرOPTIONSفسيؤدي ذلك إلى فشل طلبك الفعلي. - فقدان ترويسات الخطأ (error headers). إذا أعادت الـ API الخاصة بك خطأ 401 أو 500 بدون ترويسات CORS، فسيقوم المتصفح بإخفاء الخطأ الحقيقي، ولن ترى سوى رسالة CORS عامة.
كيفية إصلاح ذلك:
- التعامل مع طلبات
OPTIONS. تأكد من أن خادمك يعيد حالة 200 أو 204 لطلبات preflight. - استخدام البرمجيات الوسيطة (middleware). قم بتكوين CORS على مستوى الـ middleware لضمان تغطيته لجميع الاستجابات، بما في ذلك الأخطاء.
- ضبط ترويسة
Vary. إذا كنت تسمح بنطاقات متعددة بشكل ديناميكي، فيجب عليك إضافةVary: Originإلى استجابتك. - استخدام الأدوات الصحيحة. بالنسبة لـ Node.js، استخدم حزمة
cors. بالنسبة لـ Django، استخدمdjango-cors-headers.
توقف عن محاولة تجاوز CORS باستخدام إضافات المتصفح. قم بإصلاح إعدادات الخادم الخاص بك بدلاً من ذلك.
المصدر: https://dev.to/onsen/why-developers-dont-understand-cors-and-how-to-fix-it-19d5
مجتمع تعليمي اختياري: https://t.me/GyaanSetuAi