مدقق CORS

تحقق من تكوين مشاركة الموارد عبر المصدر (CORS) لأي عنوان URL. افحص رؤوس استجابة Access-Control-*، وقم بتشغيل طلب اختياري لما قبل الطيران (OPTIONS) مع أصل/طريقة/رؤوس مخصصة، واكتشف التكوينات الخاطئة الشائعة مثل النمط العام + بيانات الاعتماد، أو فقدان Vary: Origin، أو رؤوس السماح الواسعة جدًا.

Loading…

حول مدقق CORS

الصق عنوان URL لـ API أو صفحة وتحقق مما إذا كان المتصفحات ستسمح بطلبات عبر المصدر. تحلل هذه الأداة رؤوس استجابة CORS، ويمكنها تشغيل فحص واقعي لما قبل الطيران (OPTIONS)، وتسليط الضوء على التكوينات الخطرة أو المعطلة (مثل "*" مع بيانات الاعتماد، أو فقدان Vary: Origin، أو طرق/رؤوس السماح الضعيفة).

الميزات

  • فحص رؤوس CORS لأي عنوان URL عام (رؤوس Access-Control-* والرؤوس ذات الصلة).
  • محاكاة اختيارية لطلب ما قبل الطيران (OPTIONS) مع أصل مخصص، وطريقة طلب، ورؤوس طلب.
  • اتبع إعادة التوجيه (حتى 10) حتى تتمكن من التحقق من نقطة النهاية النهائية التي يصل إليها المتصفحات بالفعل.
  • عرض الرؤوس الخام للشفافية الكاملة وتصحيح الأخطاء.
  • النتائج + بطاقة النقاط مع تصفية "المشاكل فقط" للفرز السريع.
  • تحليل Vary للكشف عن فقدان Vary: Origin ومزالق CORS الأخرى المتعلقة بالذاكرة المؤقتة.
  • تصدير النتائج كتقارير JSON و PDF للمراجعات والتذاكر والتوثيق.
  • توصيات مدمجة للمشاكل الشائعة: النمط العام+بيانات الاعتماد، عكس الأصل، الأصل الفارغ، فقدان طرق/رؤوس السماح، فقدان max-age، ورؤوس السماح الواسعة جدًا.

🧭 كيفية الاستخدام for cors-checker

1

أدخل عنوان URL الهدف

الصق نقطة النهاية التي تريد اختبارها (مثال: https://api.example.com/resource).

2

حدد الأصل الذي تختبر منه

أدخل أصل تطبيق الواجهة الأمامية الخاص بك (المخطط + المضيف)، مثال: https://app.example.com. هذه هي القيمة التي يرسلها المتصفحات في رأس الأصل.

3

اختر وضع الفحص

استخدم التلقائي (موصى به) لتحليل كل من رؤوس الاستجابة وسلوك ما قبل الطيران. استخدم طلب بسيط إذا كنت تريد على وجه التحديد سيناريو بدون طلب ما قبل الطيران، أو ما قبل الطيران فقط لتشغيل فحوصات OPTIONS.

4

قم بتكوين تفاصيل طلب ما قبل الطيران (إذا كان ذلك مناسبًا)

قم بتمكين "تشغيل طلب ما قبل الطيران (OPTIONS)" وحدد طريقة الطلب بالإضافة إلى رؤوس الطلب (مفصولة بفواصل) لمحاكاة سلوك طلب ما قبل الطيران الحقيقي في المتصفح (مثال: التفويض، نوع المحتوى). قم بتبديل "اعتبار بيانات الاعتماد" إذا كانت حالة استخدامك تتضمن ملفات تعريف الارتباط أو رؤوس المصادقة.

5

راجع النتائج وقم بالتصدير

تحقق من النتائج/بطاقة النقاط وتفاصيل تحليل CORS. قم بتشغيل "إظهار الرؤوس الخام" عند تصحيح الأخطاء. قم بتصدير JSON/PDF للمشاركة أو التخزين في المراجعات.

المواصفات الفنية

نموذج الطلب

تفحص الأداة رؤوس CORS لعنوان URL هدف ويمكنها اختياريًا تنفيذ طلب ما قبل الطيران (OPTIONS) باستخدام الأصل المقدم، والطريقة، والرؤوس المطلوبة. يتم دعم متابعة إعادة التوجيه.

الإعدادالسلوكالافتراضي
وضع الفحصتلقائي، طلب بسيط، أو طلب تمهيدي فقطتلقائي
تشغيل الطلب التمهيدي (OPTIONS)إذا تم تمكينه، يقوم بمحاكاة طلب OPTIONS تمهيديمُمكّن
الأصلقيمة رأس الأصل المستخدمة للتحليل/الطلب التمهيديhttps://example.com
طريقة الطلبقيمة Access-Control-Request-Method للطلب التمهيديGET
رؤوس الطلبAccess-Control-Request-Headers (مفصولة بفواصل) للطلب التمهيديفارغ
متابعة إعادة التوجيهيتتبع سلسلة إعادة التوجيه إلى الرابط النهائيمُمكّن
الحد الأقصى لإعادة التوجيهحد إعادة التوجيه لمنع الحلقات10 (نطاق 0–20)
المهلةحد مهلة الطلب15000 مللي ثانية
وكيل المستخدميحدد وكيل المستخدم للطلبEncode64Bot/1.0 (+https://encode64.com)
الشبكات الخاصةيمنع الوصول إلى نطاقات الشبكات الخاصة لأسباب أمنيةمعطّل (الشبكات الخاصة غير مسموح بها)

الرؤوس التي تم تحليلها (مجموعة CORS الأساسية)

يركز المحلل على رؤوس استجابة وطلب CORS القياسية المستخدمة من قبل المتصفحات وفحوصات الطلبات التمهيدية.

الرأسالغرض
Access-Control-Allow-Originالأصل (الأصول) المسموح بها
Access-Control-Allow-Credentialsما إذا كانت ملفات تعريف الارتباط/بيانات الاعتماد مسموح بها (تتطلب أصل غير شامل)
Access-Control-Allow-Methodsالطرق المسموح بها لطلبات المصادر المتقاطعة (مهمة للفحص المسبق)
Access-Control-Allow-Headersالرؤوس المسموح بها (مهمة للترخيص والرؤوس المخصصة)
Access-Control-Expose-Headersأي الرؤوس يمكن لـ JavaScript في المتصفح قراءتها
Access-Control-Max-Ageالمدة التي يمكن للمتصفح خلالها تخزين نتيجة الفحص المسبق مؤقتًا
Varyتغيير مفتاح التخزين المؤقت (مثل: Vary: Origin) لمنع تسميم أو خلط الذاكرة المؤقتة
Origin / Access-Control-Request-*تُستخدم لمحاكاة سلوك الفحص المسبق

الاستدلالات (المزالق الشائعة لـ CORS التي يتم تمييزها)

تستند النتائج إلى فحوصات عملية تركز على الأمان للكشف عن إعدادات CORS المعطلة أو المحفوفة بالمخاطر.

الفحصسبب الأهمية
النمط العام + بيانات الاعتمادلا يمكن استخدام Access-Control-Allow-Origin: * مع بيانات الاعتماد؛ سيقوم المتصفح بحظرها أو يكون السلوك غير آمن
غياب Vary: Originإذا اختلفت الاستجابات حسب الأصل ولم يتم تخزينها مؤقتًا بشكل صحيح، فقد تخلط ذواكر التخزين المؤقت المشتركة الاستجابات بين المواقع
عكس الأصلتكرار الأصل بشكل أعمى قد يسمح عن غير قصد بأصول غير موثوقة
تحذيرات الأصل الفارغقد يظهر Origin: null في إطارات iframe المعزولة أو سياقات الملفات؛ السماح به غالبًا ما يكون محفوفًا بالمخاطر
غياب Allow-Methods / Allow-Headersقد يفشل الفحص المسبق إذا لم يصرح الخادم صراحةً بالطريقة/الرؤوس
Allow-Headers واسع النطاقالسماح بعدد كبير جدًا من الرؤوس يمكن أن يوسع نطاق الهجوم
غياب Max-Ageقد يتم تشغيل الفحص المسبق بشكل متكرر جدًا، مما يزيد من زمن الوصول
CORS هي آلية فرض من قبل المتصفح. لا يزال من الممكن الوصول إلى الخوادم عبر المصادر المتقاطعة عبر عملاء غير متصفح؛ عالج CORS كجزء من نهج أمني أوسع، وليس كإجراء تحكم وحيد.

سطر الأوامر

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

macOS / Linux

تحقق من رؤوس CORS لطلب عادي (محاكاة أصل متصفح)

curl -i -H "Origin: https://example.com" https://api.example.com/resource

ابحث عن Access-Control-Allow-Origin و Access-Control-Allow-Credentials و Vary.

تشغيل طلب فحص مسبق OPTIONS (طريقة + رؤوس)

curl -i -X OPTIONS -H "Origin: https://app.example.com" -H "Access-Control-Request-Method: POST" -H "Access-Control-Request-Headers: authorization, content-type" https://api.example.com/private

يجب أن يعود الفحص المسبق بـ Access-Control-Allow-Methods و Access-Control-Allow-Headers الصحيحين حتى يتمكن المتصفح من المتابعة.

اتبع عمليات إعادة التوجيه أثناء التحقق من الرؤوس

curl -iL -H "Origin: https://example.com" https://api.example.com

مفيد عندما تعيد النقاط الطرفية التوجيه إلى مضيف مختلف لديه قواعد CORS مختلفة.

ويندوز (PowerShell)

افحص رؤوس الاستجابة مع رأس Origin

$r = Invoke-WebRequest -Uri https://api.example.com/resource -Headers @{ Origin = "https://example.com" }; $r.Headers

يعرض رؤوس Access-Control-* إذا كانت موجودة.

إذا كان واجهتك الأمامية تستخدم ملفات تعريف الارتباط أو المصادقة، تجنب إعدادات CORS المتساهلة. يُفضل قائمة صريحة للمصادر الموثوقة وتضمين Vary: Origin عندما تختلف الاستجابات حسب المصدر.

حالات الاستخدام

تصحيح خطأ المتصفح "تم حظر CORS" في الواجهة الأمامية

عندما يفشل fetch/XHR بخطأ CORS، تحقق مما إذا كان الخادم يُرجع رؤوس Access-Control-* المطلوبة لمصدرك ونوع طلبك.

  • تأكد من أن Access-Control-Allow-Origin يتطابق مع مصدر تطبيقك
  • إذا كنت تستخدم ملفات تعريف الارتباط/المصادقة، تحقق من أن Access-Control-Allow-Credentials هو true (وأن المصدر ليس حرف البدل *)
  • تأكد من وجود Vary: Origin عند السماح بعدة مصادر

التحقق من الطلب التمهيدي (preflight) للمصادقة / الرؤوس المخصصة

معظم طلبات API المصادق عليها تُطلق طلبًا تمهيديًا بسبب رأس Authorization أو أنواع المحتوى غير البسيطة. تساعد هذه الأداة في التأكد من أن استجابات OPTIONS تسمح بالطريقة والرؤوس المطلوبة.

  • تحقق من أن Access-Control-Allow-Methods يتضمن POST/PUT/PATCH/DELETE حسب الحاجة
  • تحقق من أن Access-Control-Allow-Headers يتضمن authorization و content-type والرؤوس X-* المطلوبة
  • اكتشف رؤوس allow-methods/allow-headers المفقودة قبل النشر

مراجعة أمان سياسة CORS

يمكن لإعدادات CORS الخاطئة أن تعرض واجهات API الخاصة لمواقع ضارة عن غير قصد (خاصة مع بيانات الاعتماد). استخدم النتائج لاكتشاف الأنماط عالية الخطورة.

  • اكتشف استخدام حرف البدل (*) للمصدر مع بيانات الاعتماد
  • اكتشف أنماط عكس المصدر التي تسمح بمواقع عشوائية
  • ضع علامة على السماح بـ Origin: null عندما لا يكون مقصودًا

تحسين الأداء عن طريق تخزين الطلب التمهيدي مؤقتًا

تضيف طلبات preflight جولات اتصال وزمن انتقال. يمكن لـ Max-Age الصحيح تقليل عمليات التحقق التمهيدية المتكررة لواجهات API المستقرة.

  • تحقق من وجود Access-Control-Max-Age عندما يكون مناسبًا
  • قلل من استدعاءات OPTIONS المتكررة لحركة مرور API المتكررة

❓ Frequently Asked Questions

ما هو CORS بمصطلحات بسيطة؟

CORS (مشاركة الموارد عبر المصادر) هو آلية أمان في المتصفح تتحكم فيما إذا كانت صفحة ويب من مصدر واحد (البروتوكول + المضيف + المنفذ) يمكنها قراءة استجابات من مصدر آخر. يعتمد على رؤوس استجابة Access-Control-* محددة.

متى يرسل المتصفح طلبًا تمهيديًا (OPTIONS)؟

يتم إرسال الطلب التمهيدي عندما لا يكون الطلب "بسيطًا"، على سبيل المثال عند استخدام طرق مثل POST مع أنواع محتوى معينة أو عند إرسال رؤوس مثل Authorization أو رؤوس X-* مخصصة. يتحقق المتصفح من الأذونات عبر OPTIONS قبل إرسال الطلب الحقيقي.

لماذا يُعد "Access-Control-Allow-Origin: *" خطيرًا مع بيانات الاعتماد؟

يتطلب المتصفح مصدرًا صريحًا عند استخدام بيانات الاعتماد. استخدام حرف البدل (*) مع بيانات الاعتماد غير صالح للطلبات التي تستخدم بيانات الاعتماد ويشير إلى إعداد محفوف بالمخاطر. يُفضل قائمة صريحة للمصادر الموثوقة.

لماذا أحتاج إلى Vary: Origin؟

إذا كان خادمك يُرجع قيم Access-Control-Allow-Origin مختلفة اعتمادًا على مصدر الطلب، يجب أن تختلف ذاكرة التخزين المؤقت حسب المصدر لتجنب تقديم استجابة مخصصة لموقع واحد إلى موقع آخر. يساعد Vary: Origin في منع خلط ذاكرة التخزين المؤقت والمشكلات الأمنية المرتبطة بها.

هل يمكن لـ CORS حماية واجهة برمجة التطبيقات (API) الخاصة بي من العملاء غير المتصفح؟

لا. يتم فرض CORS بواسطة المتصفحات. يمكن للنصوص البرمجية التي تعمل خارج المتصفح (الخوادم، curl، تطبيقات الهاتف المحمول) استدعاء واجهة برمجة التطبيقات (API) الخاصة بك بغض النظر عن CORS. استخدم المصادقة والتفويض وتحديد معدل الطلبات للتحكم الحقيقي في الوصول.

ماذا يجب أن أضع في "رؤوس الطلب" عند اختبار الطلب المسبق (preflight)؟

اذكر الرؤوس التي سيرسلها واجهة المستخدم الأمامية، مفصولة بفواصل (مثل: authorization, content-type, x-request-id). هذا يحاكي Access-Control-Request-Headers ويتحقق مما إذا كان الخادم يسمح بها.

هل من الآمن لصق عناوين URL هنا؟

تقوم الأداة بعمل طلبات من جانب الخادم إلى عنوان URL المقدم وتحجب الأهداف على الشبكات الخاصة. تجنب تضمين الأسرار في عناوين URL (مثل الرموز المميزة في سلاسل الاستعلام) ويفضل استخدام نقاط النهاية العامة التي تثق بها.

Pro Tips

Security Tip

يفضل استخدام قائمة السماح بالأصول الموثوقة بدلاً من عكس أي أصل (Origin). تعامل مع CORS كإعداد حساس للأمان.

Security Tip

إذا كنت تستخدم ملفات تعريف الارتباط/المصادقة، اضبط Access-Control-Allow-Credentials: true وقم بإرجاع أصل صريح (ليس "*").

Security Tip

أضف Vary: Origin عند السماح بأصول متعددة أو عند اختيار الأصل المسموح به ديناميكيًا.

Performance Tip

أضف قيمة معقولة لـ Access-Control-Max-Age لتقليل زمن الوصول للطلب المسبق لواجهات برمجة التطبيقات المستقرة.

Best Practice

اختبر كل من مسار الطلب المسبق والطلب الحقيقي؛ فبعض الإعدادات تُرجع رؤوسًا صحيحة لـ GET ولكنها تفشل في OPTIONS.

CI Tip

قم بتصدير تقارير JSON واحتفظ بها جنبًا إلى جنب مع تغييرات تكوين بوابة واجهة برمجة التطبيقات لاكتشاف التراجعات بسرعة.

Additional Resources

Other Tools