عند تطوير تطبيقات الويب ، غالبا ما تواجه مشكلة كورس (تقاسم الموارد عبر المنشأ) ، والتي يمكن أن تجعل من الصعب جدا للعمل مع الخادم ، وخاصة عند تقديم طلبات أجاكس إلى مجال آخر أو استخدام أبي من خدمات طرف ثالث. في هذه المقالة ، سوف ننظر في كيفية حل المشاكل مع كورس وضمان الاتصال الآمن بين العميل والخادم.
كورس هي آلية تسمح لتطبيقات الويب بتقديم طلبات من مصادر مختلفة (المجالات). ومع ذلك ، يتم تضمين المتصفحات في آلية أمان تقيد الوصول إلى الموارد في مجال آخر. هذا يعني أنه بشكل افتراضي ، سيتم حظر طلبات أجاكس المرسلة من مجال إلى آخر بواسطة المتصفح لمنع المهاجم من الوصول إلى بيانات المستخدم الخاصة.
في هذه المقالة ، سننظر في عدة طرق لحل المشكلة مع كورس. أولا ، يمكنك استخدام رأس التحكم في الوصول والسماح بالأصل على الخادم لتحديد المجالات التي يمكنها تقديم طلبات إلى الخادم الخاص بك. ثانيا ، يمكنك استخدام جسونب (جسون مع الحشو) لتجاوز قيود نفس سياسة الأصل ، على الرغم من أن هذا الحل له حدوده. ثالثا ، يمكنك استخدام خادم وكيل يقوم بنقل الطلبات بين العميل والخادم ، وبالتالي تجاوز قيود نفس سياسة الأصل.
الجانب الرئيسي لحل المشكلة مع كورس هو الأمن. من المهم تعيين إعدادات الأمان الصحيحة على الخادم وتوخي الحذر عند معالجة الطلبات الواردة من جانب العميل. يمكن أن يؤدي التكوين أو المعالجة غير الصحيحة للطلبات إلى ثغرات خطيرة في تطبيقك.
في الأقسام التالية ، سننظر في كل طريقة من هذه الطرق بمزيد من التفصيل ، ونقدم أمثلة على التعليمات البرمجية ، ونوضح آليات الأمان التي يجب أخذها في الاعتبار عند العمل مع كورس. بعد قراءة هذه المقالة ، سوف تكون قادرة على حل المشاكل بنجاح مع كورس وضمان التفاعل الآمن لتطبيق الويب الخاص بك مع المجالات الأخرى.
- ما هو كورس?
- التعريف والمعنى
- هل تحتاج إذن كورس?
- كيف يمكنني إعداد كورس على الخادم?
- التكوين من جانب الخادم
- تكوين الوصول إلى الموارد
- 1. إضافة رؤوس كورس على الخادم
- 2. باستخدام خادم وكيل
- 3. استخدام ملفات التكوين
- إذن للوصول إلى واجهة برمجة التطبيقات
- أمثلة الاستخدام
- أمثلة على حل المشاكل مع كورس
- التحايل على قيود كورس
- سؤال وجواب
- ما هي المشكلة مع كورس?
- كيف يمكنني حل المشكلة مع كورس?
- هل من الممكن حل المشكلة مع كورس فقط على جانب العميل?
ما هو كورس?
كورس (تقاسم الموارد عبر المنشأ) هو آلية الأمن التي تتحكم في كيفية صفحات الويب أو تطبيقات الويب يمكن أن تجعل طلبات هتب إلى مصادر أخرى (المجالات).
تم تطوير معيار كورس لمنع الهجمات التي يمكن أن تحدث عند إرسال طلبات أجاكس إلى مجالات مختلفة. ويستند إلى استخدام رؤوس هتب لنقل المعلومات حول ما إذا كان يسمح لمجال معين بتقديم طلبات إلى مورد معين.
بشكل افتراضي ، تحظر المتصفحات تنفيذ الطلبات بين المصادر المختلفة بسبب سياسة المصدر نفسه( سوب) ، والتي تضع قيودا على الوصول إلى الموارد الموجودة في المجالات الأخرى. ويتم ذلك لمنع التهديدات الأمنية المحتملة مثل سرف (عبر الموقع طلب التزوير).
باستخدام كورس ، يمكنك تحديد المجالات التي يمكن أن تقدم طلبات إلى مورد ، وأنواع الطلبات (الحصول على ، نشر ، وضع ، حذف ، إلخ.) مسموح بها.
هناك عدة طرق لتكوين كورس:
- على جانب الخادم ، يمكنك تكوين رؤوس هتب التي سيتم إرسالها جنبا إلى جنب مع الاستجابة. على سبيل المثال ، يمكن للخادم إضافة رأس "التحكم في الوصول-السماح-المنشأ" مع المجال المسموح به للوصول إلى المورد.
- على جانب العميل ، يمكنك إرسال طلب برؤوس محددة تشير إلى أن الطلب عبر المجال والطرق المسموح بها.
عادة ما تتحقق الخوادم من رؤوس الطلبات وتقرر بناء عليها ما إذا كانت ستسمح أو ترفض الوصول إلى المورد.
تكوين كورس بشكل صحيح يسمح للمطورين لإنشاء تطبيقات الويب التي تتفاعل مع مجالات مختلفة والوصول إلى البيانات عن بعد دون استخدام خوادم بروكسي أو غيرها من الحلول.
التعريف والمعنى
الوصول إلى المصدر عبر المواقع (كورس) هو آلية أمنية تقيد متصفحات الويب من التفاعل بين المصادر المختلفة. يمنع تقديم طلبات الموارد الموجودة في مجال آخر ما لم يتم السماح بهذه الطلبات صراحة.
تم تصميم معيار كورس لضمان الأمن ومنع هجمات شس و سرف المتعلقة بالوصول إلى الموارد من المجالات الأخرى. يسمح للخادم بتحديد المجالات التي لديها إذن للوصول إلى مواردها.
لتقديم طلب باستخدام كورس ، يرسل المتصفح طلب الاختبار المبدئي (طلب الاختبار المبدئي) باستخدام طريقة الخيارات إلى الخادم لمعرفة ما إذا كان الخادم يسمح بالوصول من المجالات المحددة. إذا كان الخادم يستجيب بشكل إيجابي ، يقوم المتصفح بتنفيذ الطلب الرئيسي ، والذي يحتوي على المعلومات الفعلية حول الطلب.
استجابة لطلب أولي ، يجب على الخادم إرجاع بعض الرؤوس لإخبار المتصفح بما إذا كان الوصول إلى الموارد مسموحا به. يتم استخدام رؤوس التحكم في الوصول-السماح-المنشأ ، وطرق التحكم في الوصول-السماح ، ورؤوس التحكم في الوصول-السماح لهذا الغرض.
وبالتالي ، كورس يلعب دورا هاما في ضمان الأمن والسماح بالوصول إلى الموارد على صفحات الويب عندما تتفاعل مع مختلف الخوادم والمصادر.
هل تحتاج إذن كورس?
تعريف كورس
كورس (مشاركة الموارد عبر المنشأ) هي آلية أمان لمتصفح الويب تتحكم في الوصول إلى موارد صفحة الويب المستضافة على مجال آخر. يمنع طلبات الوصول الموجودة في مجال آخر غير المجال "الأصلي".
الحاجة إلى إذن كورس
الحصول على إذن كورس مهم في الحالات التالية:
- كنت تخطط لجعل أجاكس (جافا سكريبت غير متزامن و شمل) طلبات إلى الموارد الموجودة على المجالات الأخرى.
- يستخدم تطبيق الويب الذي تقوم بتطويره واجهات برمجة تطبيقات أو خدمات تابعة لجهات خارجية توفر بيانات من نطاقات أخرى.
- تريد ضمان الأمان على الخادم الخاص بك للتأكد من أن مواقع معينة فقط يمكنها الوصول إلى مواردها.
كيفية السماح كورس
هناك عدة طرق لحل كورس:
- على الخادم الذي يوفر الوصول إلى الموارد ، يمكنك تكوين رؤوس الاستجابة التي تسمح للمتصفح بتقديم طلبات كورس.
- إذا لم يكن لديك وصول إلى الخادم ، فيمكنك استخدام خادم وكيل لإرسال الطلبات إلى مجال آخر.
- إذا كنت تستخدم خدمة أو واجهة برمجة تطبيقات تابعة لجهة خارجية ، فيجب عليك الرجوع إلى وثائقها لمعرفة ما إذا كان كورس مسموحا به وكيفية تكوينه.
امتيازات الوصول عبر النطاقات
تفرض متصفحات الويب قواعد وقيودا مختلفة لأمن الوصول عبر النطاقات. يتحققون مما إذا كان هناك إذن كورس لكل طلب ، وإذا لم يكن كذلك ، فإنهم يحظرون الوصول إلى موارد مجال آخر.
| المتصفح | متاح | الميزات |
|---|---|---|
| جوجل كروم | نعم | إذا لم يرسل الخادم رؤوس كورس الضرورية ، يقوم المتصفح بحظر الوصول إلى الموارد من المجالات الأخرى. |
| فايرفوكس | نعم | سوف فايرفوكس الإبلاغ عن أخطاء كورس في وحدة تحكم المطور. |
| سفاري | نعم | يجب أن تحتوي طلبات كورس على قيم رأس صالحة. |
| مايكروسوفت إيدج | نعم | حافة تنفذ سياسة أمنية صارمة ل كورس ، تتطلب رؤوس محددة وطرق الطلب. |
في الختام ، إذن كورس هو جزء لا يتجزأ من تطوير الشبكة ، وخاصة عند العمل مع طلبات إلى مجالات أخرى وواجهات برمجة التطبيقات طرف ثالث. فهم كيفية عمل كورس ، وتكوين رؤوس المناسبة ، ومعالجة الأخطاء سوف تسمح لك لإدارة فعالة الوصول إلى الموارد وضمان أمن تطبيق الويب الخاص بك.
كيف يمكنني إعداد كورس على الخادم?
تسمح علامة كورس (مشاركة الموارد عبر المنشأ) لمواقع الويب بالتحكم في الوصول إلى الموارد في المجالات الأخرى. بدون تكوين كورس ، تقيد المتصفحات الحديثة طلبات أجاكس التي تنتقل من مجال إلى آخر. تكوين كورس على الخادم يحل هذه المشكلة ويسمح لمواقع العميل لتبادل البيانات عبر زملتبركست.
لتكوين كورس على الملقم اتبع الخطوات التالية:
- قم بتعيين رأس التحكم في الوصول والسماح بالأصل على الخادم للسماح بالوصول لنطاقات معينة أو لجميع المجالات. يشير رأس التحكم في الوصول والسماح بالأصل إلى المجالات التي لديها إذن لتنزيل المورد من الخادم. إذا كانت قيمة الرأس " * " ، فهذا يعني أن المورد متاح للتنزيل من أي مجال.
- قم بتعيين رأس التحكم في الوصول-السماح-الأساليب لتحديد طرق هتب المسموح لها بالوصول إلى المورد من المجالات الأخرى. على سبيل المثال ، يمكن الحصول عليها ، ونشرها ، ووضعها ، وحذفها ، وما إلى ذلك
- . قم بتعيين رأس رؤوس السماح للتحكم في الوصول للسماح برؤوس معينة يمكن تمريرها مع الطلب. وهذا يسمح للمتصفح لإرسال رؤوس مخصصة مثل س-طلب-مع ، إذن ، وغيرها.
- قد تتضمن الإعدادات الإضافية تعيين رأس التحكم في الوصول والسماح ببيانات الاعتماد إذا كان من الضروري السماح بنقل بيانات الاعتماد (على سبيل المثال ، ملفات تعريف الارتباط ورؤوس التفويض) من العميل إلى الخادم. يجب تعيين هذا الرأس فقط إذا كانت القيمة شر.ويثكريدينتيالز = صحيح يتم تعيين على جانب العميل.
مثال على إعداد كورس على الخادم:
| العنوان | المعنى |
|---|---|
| التحكم في الوصول-السماح-المنشأ | * |
| طرق التحكم في الوصول | احصل ، انشر ، ضع ، احذف |
| التحكم في الوصول-السماح-الرؤوس | نوع المحتوى ، التفويض |
| التحكم في الوصول-السماح-أوراق الاعتماد | صحيح |
ملاحظة: قد يعتمد إعداد كورس على النظام الأساسي المحدد والخادم الذي تستخدمه. لذلك ، يوصى بالرجوع إلى وثائق الخادم أو دعمه للحصول على معلومات أكثر تفصيلا حول تكوين كورس.
التكوين من جانب الخادم
لحل المشاكل مع كورس (تقاسم الموارد عبر المنشأ) على جانب الخادم ، تحتاج إلى إجراء العديد من الإعدادات. سيؤدي ذلك إلى إزالة الأخطاء المتعلقة بقيود أمان البروتوكول وضمان التفاعل الصحيح بين العميل والخادم.
1. أضف رؤوس التحكم في الوصول-السماح-المنشأ والتحكم في الوصول-السماح-الأساليب.
يشير رأس التحكم في الوصول والسماح بالأصل إلى المصادر المسموح لها بالوصول إلى موارد الخادم. غالبا ما يتم استخدام القيمة " * " ، مما يعني أن الوصول مسموح به لجميع المصادر، ولكن يمكنك تحديد مصادر محددة ، على سبيل المثال "http://example.com ".
يحدد رأس التحكم في الوصول-السماح-الأساليب طرق هتب (جيت ، بوست ، بوت ، حذف ، الخ.) يسمح باستخدامه عند تقديم طلب إلى الخادم.
مثال على التكوين في فب:
رأس ('التحكم في الوصول-السماح-الأصل:*');
رأس ('التحكم في الوصول-السماح-طرق: الحصول ، آخر ، وضع ، حذف');
2. السماح باستخدام ملفات تعريف الارتباط للطلبات الواردة من مصادر أخرى.
للقيام بذلك ، أضف رأس التحكم في الوصول والسماح ببيانات الاعتماد بالقيمة"صحيح".
مثال على التكوين في فب:
رأس ('التحكم في الوصول-السماح-الأصل:*');
رأس ('التحكم في الوصول-السماح-طرق: الحصول ، آخر ، وضع ، حذف');
رأس ('التحكم في الوصول-السماح-بيانات الاعتماد: صحيح');
3. السماح باستخدام رؤوس معينة في الطلبات.
تتطلب بعض الرؤوس ، مثل نوع المحتوى أو التفويض ، إذنا إضافيا لاستخدامه في الطلبات الواردة من مصادر أخرى. Для этого необходимо добавить заголовок Access-Control-Allow-Headers и указать разрешенные заголовки.
Пример настройки в PHP:
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Headers: Content-Type, Authorization');
4. Ограничьте время жизни (TTL) предзагруженных запросов.
يتم تنفيذ الطلبات المحملة مسبقا (طلبات الاختبار المبدئي) بواسطة المتصفح قبل إرسال الطلب الرئيسي وقد تحتوي على رؤوس إضافية. بشكل افتراضي ، تقوم المتصفحات بتخزين نتائج الاستعلامات المحملة مسبقا لفترة معينة (عادة من 5 إلى 20 دقيقة). Чтобы изменить время кэширования, добавьте заголовок Access-Control-Max-Age с указанием значения в секундах.
Пример настройки в PHP:
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Headers: Content-Type, Authorization');
header('Access-Control-Max-Age: 3600'); // кэш на 1 час
5. Обработайте предзагруженные запросы.
يتم إرسال الطلبات المحملة مسبقا بواسطة طريقة الخيارات وتحتوي على رؤوس إضافية تحتوي على معلومات حول الطرق والرؤوس المسموح بها. من الضروري التحقق منها وإرجاع الرؤوس المناسبة.
مثال على معالجة طلب تم تحميله مسبقا في فب:
إذا (ERVER _الخادم ['طلب_طريقة'] = = = 'خيارات') {
رأس ('التحكم في الوصول-السماح-الأصل:*');
رأس ('الوصول-التحكم-السماح-طرق: الحصول على ، آخر ، وضع ، حذف');
رأس ('التحكم في الوصول-السماح-بيانات الاعتماد: صحيح');
العنوان ('التحكم في الوصول-السماح-الرؤوس: نوع المحتوى ، التفويض');
خروج;
}
التكوين السليم من جانب الخادم يتجنب الأخطاء والقيود المرتبطة كورس. ستساعد هذه الخطوات في ضمان التفاعل الصحيح بين العميل والخادم وضمان أمان نقل البيانات.
تكوين الوصول إلى الموارد
يمكن تكوين الوصول إلى الموارد التي تخضع لسياسات كورس على جانب الخادم باستخدام طرق مختلفة. في هذا القسم ، سننظر في عدة أنواع من الإعدادات.
1. إضافة رؤوس كورس على الخادم
واحدة من الطرق الأكثر شيوعا لتكوين كورس هو إضافة الرؤوس المناسبة إلى استجابات هتب الخادم.
مثال على هذا الإعداد باستخدام لغة جافا سكريبت والمكتبة السريعة:
كونست اكسبرس = تتطلب ('اكسبرس');
كونست التطبيق = اكسبرس ();
التطبيق.استخدام ((مسا ، الدقة ، التالي) = > {
('التحكم في الوصول-السماح-المنشأ'،'*');
سيثيدر ('الوصول-التحكم-السماح-أساليب' ، 'الحصول على ، آخر ، وضع ، حذف');
الدقة.سيثيدر ('التحكم في الوصول-السماح-رؤوس' ، 'نوع المحتوى');
التالي();
});
التطبيق.الحصول على ('/أبي / البيانات ' ، (ريس ، ريس) = > {
// معالجة الطلب وإرسال الرد
});
التطبيق.الاستماع (3000 ، () = > {
وحدة التحكم.سجل ('الخادم يعمل على المنفذ 3000');
});
في هذا المثال ، نضيف ثلاثة رؤوس:
- التحكم في الوصول-السماح-الأصل-يحدد المصادر المسموح لها بالوصول إلى المورد. تعني القيمة " * "" أن الوصول من جميع المصادر مسموح به.
- طرق التحكم في الوصول-السماح-تحدد طرق هتب المسموح بها عند الوصول إلى المورد.
- التحكم في الوصول-السماح بالرؤوس-يحدد الرؤوس المسموح بها عند الوصول إلى المورد.
لاحظ أنه في هذا المثال استخدمنا ' * ' في قيمة رأس التحكم في الوصول-السماح-الأصل ، مما يعني السماح بالوصول من جميع المصادر. في المشاريع الحقيقية ، من الأفضل تحديد مصادر محددة يسمح بالوصول إليها.
2. باستخدام خادم وكيل
هناك طريقة أخرى لتكوين الوصول إلى الموارد من كورس وهي استخدام خادم وكيل. يعمل الخادم الوكيل كوسيط بين العميل والخادم ، مضيفا رؤوس كورس اللازمة للطلبات المرسلة من قبل العميل.
مثال على تكوين خادم وكيل باستخدام مكتبة هتب-بروكسي-الوسيطة:
كونست اكسبرس = تتطلب ('اكسبرس');
كونست { كريتيبروكسيميدوار } = تتطلب ('هتب-بروكسي-الوسيطة');
كونست التطبيق = اكسبرس ();
التطبيق.استخدام ('/أبي' ، كريتيبروكسيميد ({
الهدف: 'http://example.com',
التغييرالمنشأ: صحيح,
الرؤوس: {
'التحكم في الوصول-السماح-المنشأ':'*',
'التحكم في الوصول-السماح-طرق': 'الحصول على ، آخر ، وضع ، حذف',
'التحكم في الوصول-السماح-رؤوس': 'نوع المحتوى',
}
}));
التطبيق.الاستماع (3000 ، () = > {
وحدة التحكم.سجل ('الخادم الوكيل يعمل على المنفذ 3000');
});
في هذا المثال ، نقوم بإعداد خادم وكيل لمعالجة الطلبات إلى الموارد الموجودة على "http://example.com ". نضيف رؤوس كورس اللازمة للطلبات.
هذا النهج مفيد بشكل خاص إذا لم يكن لديك حق الوصول إلى الخادم المصدر الذي يستضيف الموارد.
3. استخدام ملفات التكوين
تسمح لك بعض الخوادم بتكوين كورس باستخدام ملفات التكوين. Настройки CORS вынесены в отдельные конфигурационные файлы, которые загружаются сервером при запуске.
Пример файла конфигурации для сервера Apache:
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE"
Header always set Access-Control-Allow-Headers "Content-Type"
في هذا المثال ، نستخدم وحدة مود_هيدرز لإضافة الرؤوس المناسبة إلى استجابات هتب للخادم.
يرجى ملاحظة أنه من أجل استخدام طريقة تكوين كورس هذه ، يجب أن يكون لديك حق الوصول إلى الخادم وملفات التكوين الخاصة به.
هذه مجرد أمثلة قليلة على طرق تكوين الوصول إلى الموارد باستخدام بروتوكول كورس. اعتمادا على الوضع الخاص بك والخادم الذي تستخدمه ، طرق التكوين الأخرى ممكنة.
إذن للوصول إلى واجهة برمجة التطبيقات
عند العمل مع تطبيقات الويب ، غالبا ما يكون من الضروري تلقي البيانات من خادم بعيد عبر واجهة برمجة التطبيقات. ومع ذلك ، لأسباب أمنية ، تطبق المتصفحات سياسة أمان طلب عبر المواقع (كورس - مشاركة الموارد عبر المنشأ) ، والتي تقيد الوصول إلى الموارد الموجودة في المجالات الأخرى.
من أجل السماح لتطبيق ويب بالوصول إلى البيانات من خادم خارجي باستخدام طلبات أجاكس ، يجب على الخادم منح الإذن للوصول إلى موارده من خلال رؤوس استجابة هتب. يمكن القيام بذلك عن طريق إضافة التحكم في الوصول-السماح-المنشأ ، التحكم في الوصول-السماح-الأساليب ، التحكم في الوصول-السماح-الرؤوس ورؤوس أخرى إلى استجابة الخادم.
يحدد رأس التحكم في الوصول والسماح بالأصل المجال الذي يسمح منه بالوصول إلى المورد. إذا كانت قيمة هذا الرأس " * " ، فيسمح بالوصول من أي مجال. خلاف ذلك ، سيتم السماح بالوصول فقط من المجال المحدد ، مما يزيد من الأمان.
يحدد رأس طرق التحكم في الوصول السماح طرق الطلب المسموح بها. على سبيل المثال ، للسماح فقط الحصول على الطلبات ونشرها ، يجب أن تكون قيمة هذا الرأس "الحصول على ، نشر".
يسمح لك رأس التحكم في الوصول والسماح بالرؤوس بتحديد قائمة برؤوس الطلبات المسموح بها.
تحتاج أيضا إلى تعيين رأس التحكم في الوصول-السماح-بيانات الاعتماد إلى ترو للسماح بنقل بيانات الاعتماد (ملفات تعريف الارتباط ، إذن هتب) للطلبات من مجال آخر.
يبدو مثال على استجابة الخادم مع جميع الرؤوس المحددة كما يلي:
| المتشعب / 1.1 200 موافق |
|---|
| التحكم في الوصول-السماح-المنشأ: http://example.com |
| طرق التحكم في الوصول: الحصول ، النشر ، الخيارات |
| التحكم في الوصول-السماح-الرؤوس: نوع المحتوى |
| التحكم في الوصول-السماح-أوراق الاعتماد: صحيح |
إذا لم يستجب الخادم بالرؤوس الضرورية ، فسيقوم المتصفح برفض الوصول إلى المورد بسبب سياسة أمان كورس.
لتبسيط العمل مع كورس والسماح بالوصول إلى واجهة برمجة التطبيقات دون الحاجة إلى تكوين الخادم ، يمكنك استخدام خادم وكيل. ينفذ الخادم الوكيل طلبات واجهة برمجة التطبيقات من خادم التطبيق ، متجاوزا سياسة أمان المتصفح. وبالتالي ، يحتاج رمز العميل إلى إرسال الطلبات فقط إلى الخادم الوكيل ، وسيقدم بالفعل طلبات إلى واجهة برمجة التطبيقات ويعيد النتيجة مرة أخرى.
كورس قيد التشغيل ، يجب تكوين أبي للسماح بالوصول من مجال التطبيق. يتم ذلك غالبا عن طريق إضافة مجال التطبيق إلى الطلبات الواردة المسموح بها في إعدادات واجهة برمجة التطبيقات.
ومع ذلك ، ضع في اعتبارك أن السماح بالوصول إلى واجهة برمجة التطبيقات من العميل قد يكون له مخاطر أمنية معينة. لذلك ، من الضروري التحقق بعناية من الطلبات التي يتم إرسالها وضمان أمان واجهة برمجة التطبيقات من جانب الخادم.
أمثلة الاستخدام
دعونا نلقي نظرة على بعض الأمثلة لفهم كيف يمكنك حل المشاكل مع كورس.
مثال 1: استخدام استعلام بسيط
إذا كنت تحاول إرسال طلب بسيط باستخدام زملتبركست ، يمكنك إضافة رأس "الوصول-التحكم-السماح-الأصل" مع المجال الذي سوف ترسل الطلبات. فيما يلي مثال على الكود الموجود على الخادم الذي يسمح لك بإرسال طلب من أي مجال:
على الخادم:
- المستجيبين ['التحكم في الوصول-السماح-المنشأ']='*';
على العميل:
فار شر = جديد زملتبركست ();
شر.فتح ('الحصول على' ، 'https://api.example.com/data' ، صحيح);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
var response = JSON.parse(xhr.responseText);
console.log(response);
}
};
xhr.send();
Пример 2: Использование простого запроса с предварительной проверкой (preflight)
إذا كنت تحاول إرسال طلب برأس أو طريقة غير قياسية ، فيجب إجراء فحص الاختبار المبدئي باستخدام طريقة الخيارات. فيما يلي نموذج رمز على الخادم يسمح لك بالتحقق المسبق من صحة طلب من أي مجال:
على الخادم:
- المستجيبين ['التحكم في الوصول-السماح-المنشأ']='*';
- المستجيبين ['التحكم في الوصول-السماح-طرق'] = 'الحصول على ، آخر ، خيارات';
respon المستجيبين ['التحكم في الوصول-السماح-رؤوس'] = 'نوع المحتوى';
على العميل:
فار شر = جديد زملتبركست ();
شر.فتح ('بوست' ، 'https://api.example.com/data' ، صحيح);
شر.سيتركستيدر ('نوع المحتوى' ، 'تطبيق / جسون');
شر.سيتركستيدر ('رأس مخصص' ، 'قيمة');
شر.أونريديستاتيتشانج = وظيفة () {
إذا (شر.الدولة الجاهزة = = = 4 & & شر.الحالة = = = 200) {
استجابة فار = جسون.تحليل (شر.ريسبونسيتكست);
وحدة التحكم.سجل (استجابة);
}
};
شر.إرسال();
Cred 3: cred الاعتماد
إذا كنت ترغب في إرسال طلبات مع بيانات الجلسة (على سبيل المثال ، ملفات تعريف الارتباط) ، تحتاج إلى تعيين علامة 'بيانات الاعتماد' للطلب. تحتاج أيضا إلى تعيين رأس 'التحكم في الوصول-السماح-بيانات الاعتماد' إلى 'صحيح' على الخادم. فيما يلي نموذج رمز على الخادم والعميل للاستخدام مع بيانات الاعتماد:
على الخادم:
respon المستجيبين ['التحكم في الوصول-السماح-المنشأ'] = 'https://example.com';
$responseHeaders['Access-Control-Allow-Credentials'] = 'true';
on client:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.example.com/data', true);
xhr.withCredentials = true;
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
var response = JSON.parse(xhr.responseText);
console.log(response);
}
};
xhr.send();
Это лишь некоторые из примеров использования для решения проблем с CORS. قد تعتمد الإعدادات المحددة على الخادم والعميل ، لذلك يوصى بالرجوع إلى وثائق الخادم أو إطار العمل للحصول على معلومات مفصلة. آمل أن تكون هذه المقالة قد ساعدتك على فهم هذا الموضوع وإيجاد حل لمشاكلك مع كورس.
أمثلة على حل المشاكل مع كورس
1. باستخدام خادم وكيل
واحدة من الطرق الأكثر شيوعا لحل المشاكل مع كورس هو استخدام ملقم وكيل. الخادم الوكيل هو وسيط بين العميل والخادم ، والذي يسمح لك بتجاوز قيود سياسة نفس الأصل وتقديم طلبات إلى مجالات أخرى.
لاستخدام خادم وكيل ، تحتاج إلى تكوين الواجهة الخلفية للتطبيق بحيث يعيد توجيه الطلبات من العميل إلى المجال المطلوب. على سبيل المثال ، إذا كان لديك تطبيق ويب على نطاق example.com وتريد الوصول إلى واجهة برمجة التطبيقات على المجال api.example.com ثم سيقوم الخادم الوكيل بإعادة توجيه الطلبات من example.com على api.example.com .
2. إضافة رؤوس كورس على الخادم
هناك طريقة أخرى لحل المشكلات مع كورس وهي إضافة الرؤوس المناسبة إلى الردود من الخادم. يجب أن يتضمن خادم الويب الرؤوس التالية في ردوده:
- - يسمح بالوصول إلى المورد من أي مجال.
- - يسمح باستخدام طرق استعلام معينة.
- - يسمح باستخدام رؤوس معينة.
يسمح تعيين هذه الرؤوس للمتصفح بتجاوز سياسة المصدر نفسه والوصول إلى المورد من مجال آخر. لا تنس إعداد الخادم بحيث يتضمن هذه الرؤوس في ردوده.
3. باستخدام جسونب
للحصول على بيانات من مجال آخر.
لاستخدام جسونب ، تحتاج إلى الاتصال بخادم بعيد ، وتمرير وظيفة رد الاتصال في الطلب ، والتي سيتم استدعاؤها عند تلقي البيانات. يجب على الخادم التفاف البيانات في مكالمة إلى وظيفة رد الاتصال هذه وإعادتها في استجابة.
4. استخدام إعدادات الخادم
.
5. استخدام ملحقات المتصفح
توفر بعض المتصفحات ملحقات تسمح لك بتقديم طلبات إلى نطاقات أخرى ، متجاوزة سياسة المصدر نفسه. على سبيل المثال ، تمديد" موسيف الأصل و كورس مبدل " لجوجل كروم يسمح لك لتكوين كورس لنطاقات محددة.
على الرغم من أن استخدام الإضافات يمكن أن يكون مناسبا لتصحيح الأخطاء والاختبار ، إلا أنها لا تحل مشكلة كورس لجميع المستخدمين وليست الطريقة الموصى بها لحل المشكلات.
التحايل على قيود كورس
إذا لم تتمكن من تغيير إعدادات الخادم أو الوصول إلى شفرة مصدر واجهة برمجة التطبيقات ، فيمكنك محاولة تجاوز قيود كورس. هناك عدة طرق للقيام بذلك.
1. باستخدام خادم وكيل
طريقة واحدة للتغلب على المشكلة مع كورس هو استخدام ملقم وكيل. يمكن نشر الخادم الوكيل على الاستضافة الخاصة بك أو استخدام خدمة طرف ثالث. يتلقى الخادم الوكيل طلبات من العميل ويعيد توجيهها إلى واجهة برمجة التطبيقات ، ثم يعيد الردود إلى العميل.
على سبيل المثال ، إذا كان التطبيق الخاص بك يعمل على مجال المثال.كوم وتريد الوصول إلى واجهة برمجة التطبيقات المستضافة على api.example.com ثم يمكنك إنشاء خادم وكيل على example.com والتي ستعيد توجيه الطلبات إلى api.example.com . بهذه الطريقة ، يمكنك تجاوز قيود كورس ، لأن العميل الخاص بك يتفاعل فقط مع الخادم الوكيل الخاص بك على نفس المجال.
2. باستخدام جسونب
إذا كان أبي يدعم جسونب (جسون مع الحشو) ، يمكنك استخدام هذه الطريقة لتجاوز قيود كورس. جسونب هو الأسلوب الذي يسمح لك لتحميل البيانات من مجال آخر عن طريق التفاف طلب في استدعاء وظيفة جافا سكريبت.
يمكنك إنشاء وظيفة سيتم استدعاؤها عند تلقي البيانات من واجهة برمجة التطبيقات ، وتمريرها كمعلمة لطلب واجهة برمجة التطبيقات. يجب أن تقوم واجهة برمجة التطبيقات بإرجاع استجابة ملفوفة في استدعاء دالة سيتم استدعاؤها في البرنامج النصي للعميل. وبهذه الطريقة ، سوف تجاوز القيود المفروضة على كورس ، لأن الطلب سوف تبدو وكأنها استدعاء وظيفة على نفس المجال ، وليس طلب أجاكس العادية.
3. باستخدام الرؤوس
هناك طريقة أخرى للتغلب على قيود كورس وهي استخدام الرؤوس. تسمح لك بعض الخوادم بتكوين نهج كورس باستخدام رؤوس خاصة. يمكنك إضافة الرؤوس التالية إلى طلبك:
- الأصل: يحدد المجال الذي يتم إرسال الطلب منه. يمكن أن يكون مفيدا إذا تحقق الخادم من امتيازات المجال واتخذ قرارا بناء على هذه المعلومات.
- طريقة التحكم في الوصول والطلب: تحدد الطريقة التي سيتم استخدامها في الطلب. تتطلب بعض الخوادم تضمينه في الطلب.
- التحكم في الوصول-طلب-رؤوس: يحدد قائمة الرؤوس التي سيتم استخدامها في الطلب. قد يكون أيضا شرطا لبعض الخوادم.
يمكن أن تساعد إضافة هذه الرؤوس إلى طلبك في التحايل على قيود كورس إذا كان الخادم يدعم معالجتها.
مهم!
عند استخدام ملقم وكيل أو جسونب ، من المهم أن نأخذ في الاعتبار أمن وموثوقية هذه الأساليب. يجب أن يكون الخادم الوكيل موثوقا به وأن يعالج الطلبات بشكل صحيح وفقا لسياسة أمان التطبيق الخاصة بك. قد يكون جسونب عرضة لبعض الهجمات ، لذلك تأكد من التعرف على حدوده والمخاطر المحتملة.
سؤال وجواب
ما هي المشكلة مع كورس?
المشكلة مع كورس (تقاسم الموارد عبر المنشأ) يحدث عندما يقوم المتصفح بحظر الطلبات بين المجالات المختلفة لأسباب أمنية. هذا يعني أن صفحات الويب لا يمكنها الوصول إلى الموارد في المجالات الأخرى بدون أذونات خاصة.
كيف يمكنني حل المشكلة مع كورس?
هناك عدة طرق لحل المشكلة مع كورس. واحد منهم هو تكوين الخادم لتشمل الرؤوس التي تسمح بالوصول إلى الموارد من المجالات الأخرى. هناك طريقة أخرى وهي استخدام خادم وكيل يعيد توجيه الطلبات بين المجالات. يمكنك أيضا استخدام جسونب أو كورس الوسيطة للتغلب على المشكلة مع كورس.
هل من الممكن حل المشكلة مع كورس فقط على جانب العميل?
لا ، المشكلة مع كورس لا يمكن حلها تماما فقط على جانب العميل. قد لا ترسل بعض المتصفحات طلبات إلى الخادم إذا لم يسمح بالوصول وفقا لسياسة كورس. لذلك ، يعد تكوين الخادم ضروريا أيضا لحل المشكلة بالكامل.