أتساءل ما هو CORS (تقاسم الموارد عبر المصدر)?
في أفلام التجسس ، لدى عناصر الأمن طريقة مشفرة لنقل المعلومات فيما بينهم. نظرًا لأنهم غالبًا ما ينقلون المعلومات التي يمكن استخدامها ضدهم إذا وقعت في أيدي أعدائهم ، يجب عليهم التأكد من أن أولئك الذين يتلقون المعلومات هم أطراف موثوق بها. الأمر نفسه ينطبق على أولئك الذين يرسلون المعلومات المذكورة. عندما يتم الوثوق بالمرسل والمستقبل ، يمكن ضمان مصداقية المعلومات وأمانها.
https://pt.slideshare.net/atirekgupta/selenium-workshop-34820044
تحدث نسخة طبق الأصل من هذا السيناريو في الاتصال بين المتصفحات وخوادم الويب ، ويسمى سياسة الأصل نفسه.
وفقًا لـ MDN:
ال سياسة الأصل نفسه هي آلية أمان حرجة تحد من كيفية تفاعل مستند أو نص برمجي تم تحميله من أصل واحد مع مصدر من أصل آخر. يساعد في عزل المستندات التي يحتمل أن تكون ضارة ، مما يقلل من ناقلات الهجوم المحتملة.
Contents
ما هو CORS?
في حالة واقعية ، عندما يعطي عملاء الأمن قاعدة مفادها أن الاتصال يجب أن يحدث فقط بين عناصرها كوسيلة للأمان ، فهذا مشابه لسياسة المصدر نفسه. ومع ذلك ، قد تكون هناك حالات يحتاجون فيها إلى التفاعل مع العالم الخارجي. أو مع عناصر من الأجهزة الأمنية الأخرى ، لتحقيق ذلك ، يمكنهم تنفيذ إجراء أمني آخر تحقق هؤلاء النشطاء. يمكن أن يأتي هذا التحقق بطرق مختلفة ، اعتمادًا على النشطاء المعنيين. في حالة الاتصال على الإنترنت, كورس هي الآلية التي تمكن المتصفحات من الوصول إلى الموارد التي لن يتمكنوا في الأصل من الوصول إليها لأن المصدر من أصل مختلف.
مشاركة الموارد عبر المصدر (CORS) هي آلية تستخدم رؤوس HTTP إضافية لإخبار المتصفحات بإعطاء تطبيق ويب يعمل في أصل واحد ، والوصول إلى الموارد المحددة من أصل مختلف.
لقد تحدثت عن الأصل أكثر من مرة ، وربما تتساءل عن ماذا يعني ذلك. يتم تعريف الأصل بواسطة البروتوكول ، والمجال ، والمنفذ لعنوان URL. عندما يكون لديك API الخاص بك في أصل مثل https://api.geekflare.com:3001 والواجهة الأمامية على https://geekflare.com ، يقال أن الأصول مختلفة. في هذه الحالة ، ستحتاج إلى CORS لتتمكن من الوصول إلى الموارد من كلا الطرفين.
عندما يتم تقديم الطلبات إلى الخادم ، ترسل المستعرضات (العميل) والخوادم الطلبات والاستجابة ، ويتم تضمين رؤوس HTTP. من بين هذه الرؤوس ، يتم تضمين رؤوس إضافية لمنع المتصفح من حظر الاتصال.
لماذا يمنع المتصفح الاتصال?
ميزات أمان المتصفح. ستفعل ذلك إذا كان الطلب قادمًا من أصل مختلف عن أصل العميل. الرؤوس الإضافية المضمنة نتيجة CORS هي طريقة لإخبار العميل أنه يمكنه الاستفادة من الاستجابة التي تلقاها.
رؤوس CORS
أحد الرؤوس الآمنة التي يمكن أن تكون إما استجابة أو طلب رأس.
رؤوس الاستجابة
هذه هي الرؤوس التي يرسلها الخادم في استجابته.
- Access-Control-Allow-Origin: يستخدم هذا لتحديد الأصل المسموح به للوصول إلى المورد على الخادم. من الممكن تحديد أن الطلبات من أصل معين فقط هي المسموح بها – Access-Control-Allow-Origin: https://geekflare.com ، أو أن الأصل لا يهم – Access-Control-Allow-Origin: *.
- Access-Control-Expose-Headers: كما يوحي الاسم ، يسرد هذا العناوين التي يستطيع المتصفح الوصول إليها.
- Access-Control-Max-Age: يشير هذا إلى المدة التي يمكن فيها تخزين استجابة طلب الاختبار المبدئي مؤقتًا.
- Access-Control-Allow-Credentials: يشير هذا إلى أن المتصفح يمكنه الاستفادة من الاستجابة عندما تم تقديم الطلب الأولي باستخدام بيانات اعتماد.
- Access-Control-Allow-Methods: يشير هذا إلى الطريقة (الأساليب) المسموح بها عند محاولة الوصول إلى مورد.
- Access-Control-Allow-Headers: يشير هذا إلى إمكانية استخدام رؤوس HTTP في الطلب.
في ما يلي مثال على شكل الاستجابة
HTTP / 1.1 204 لا يوجد محتوى
التحكم في الوصول – السماح – الأصل: *
طرق التحكم في الوصول – السماح: GET ، HEAD ، PUT ، PATCH ، POST ، DELETE
Vary: Access-Control-Request-رؤوس
Access-Control-Allow-رؤوس: نوع المحتوى ، قبول
طول المحتوى: 0
التاريخ: السبت ، 16 نوفمبر 2019 11:41:08 GMT + 1
اتصال: إبقاء على قيد الحياة
رؤوس الطلبات
في ما يلي العناوين التي يجب أن يحتوي عليها طلب العميل للاستفادة من آلية CORS.
- الأصل: يشير هذا إلى أصل طلب العميل. عند العمل مع واجهة أمامية وخلفية ، كما هو مذكور سابقًا ، سيكون هذا هو مضيف تطبيق الواجهة الأمامية.
- أسلوب التحكم في الوصول: يستخدم في طلب الاختبار المبدئي للإشارة إلى طريقة HTTP التي سيتم استخدامها لإجراء الطلب.
- Access-Control-Request-Headers: يُستخدم هذا في طلب الاختبار المبدئي للإشارة إلى رؤوس HTTP التي سيتم استخدامها لإجراء الطلب.
في ما يلي مثال على شكل الطلب
curl -i -X OPTIONS localhost: 3001 / api \
-H ‘Access-Control-Request-Method: GET’ \
-H ‘Access-Control-Request-Headers: Content-Type، Accept’ \
-H ‘الأصل: http: // localhost: 3000’
طلبات الاختبار المبدئي
https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
بعد ذكر طلبات الاختبار المبدئي هنا وهناك ، ماذا يمكن أن يعني ذلك?
تحدث طلبات الاختبار المبدئي عندما يتعين على العميل إرسال طلب اختبار مسبق قبل الطلب الرئيسي. طلب الاختبار المبدئي أكثر من مسبار لتحديد ما إذا كان الخادم يدعم الطلب الرئيسي الذي على وشك تقديمه. عند الحصول على تأكيد إيجابي ، يتم إرسال الطلب الرئيسي.
عندما يكون الطلب ليس طلبًا مسبقًا ، فإنه يسمى a طلب بسيط.
تنفيذ CORS
ستحتاج في الغالب إلى إعداد أشياء في الواجهة الخلفية لتطبيقك. يعتمد التنفيذ على الإطار الذي تستخدمه. في هذا البرنامج التعليمي ، سنلقي نظرة على كيفية القيام بذلك في NodeJS و Rails.
القضبان
أنصحك بالاستفادة من رفوف جوهرة. ثم ستحتاج إلى إضافة هذا إلى ملف config / application.rb الخاص بك.
config.middleware.insert_before 0 ، رف :: كورس تفعل
تسمح
أصول “*”
المورد “*”,
رؤوس:: أي,
كشف:٪ i (عميل uid من نوع رمز الوصول المميز لرمز مميز),
الأساليب:٪ i (الحصول على رأس خيارات حذف التصحيح بعد التثبيت),
أوراق الاعتماد: صحيح
النهاية
النهاية
NodeJS
في Node.js ، سيبدو هذا على هذا النحو.
app.all (“*” ، (req ، res ، next) => {
res.header (“Access-Control-Allow-Origin”، “*”) ؛
res.header (“Access-Control-Allow-Methods”، “PUT، GET، POST، DELETE، PATCH، OPTIONS HEAD”) ؛
res.header (“Access-Control-Allow-Headers”، “*”) ؛
res.header (“Access-Control-Allow-Credentials” ، صحيح) ؛
التالى()؛
}) ؛
في مقتطف الشفرة ، نقوم بإعداد الأصل والأساليب والعناوين وبيانات الاعتماد التي يجب السماح لها بالوصول إلى الموارد المتاحة على الخادم الخاص بنا. يمكنك أيضا الخروج صقرين الذي يوفر وحدة رؤوس أمان لتكاملها مع تطبيقات Ruby و PHP و Python و Java و Go و Node.JS. وللتنفيذ في Apache أو Nginx ، ارجع إلى هذا الدليل.
استنتاج
تعمل CORS على تخفيف السياسة بحيث يمكن لمتصفحك الوصول إلى الموارد التي تريدها. سيساعدك فهم ماهية الأمر وسبب أهميته وكيفية إعداده في اكتشاف المشكلات التي قد تواجهها أثناء إنشاء تطبيقات الويب.