تحميل الموارد من مصادر متعددة بدون عناوين CORP باستخدام COEP: بدون بيانات اعتماد

غالبًا ما لا تتضمن الموارد المشتركة المصدر التي تقدمها جهات خارجية عناوين CORP ملائمة. وإذا كان من الممكن طلبها بدون بيانات الاعتماد، يمكنك الآن تفعيل ميزة عزل المحتوى من نطاقات أخرى عن طريق وضع علامة عليها على أنّها كذلك.

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

أهمية حظر الوصول من نطاقات أخرى

تزيد بعض واجهات برمجة تطبيقات الويب من مخاطر هجمات القنوات الجانبية، مثل Spectre. للحدّ من هذه المخاطر، توفّر المتصفِّحات بيئة معزولة تستند إلى الموافقة تُسمى عزل المحتوى من مصادر متعددة. في حال عزل المحتوى من نطاقات أخرى، يمكن لصفحة الويب استخدام ميزات خاصة تشمل SharedArrayBuffer وperformance.measureUserAgentSpecificMemory() والموقّتات العالية الدقة ذات الدقة الأفضل مع عزل المصدر عن المصادر الأخرى ما لم يفعّلوا الميزة.

يجب أن ترسل صفحة الويب عنوانَي HTTP لتفعيل ميزة العزل المشترك المصدر:

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

مع حظر الوصول من نطاقات آخرى، يجب عرض جميع الموارد من مصادر متعددة من خلال بروتوكول CORS أو ضبط عنوان Cross-Origin-Resource-Policy ليتم تحميلها.

تحديات تفعيل حظر الوصول من نطاقات أخرى

وعلى الرغم من أنّ ميزة "عزل المحتوى من مصادر متعددة" توفّر لصفحات الويب مستوى أمان أفضل وقدرة على تفعيل ميزات فعّالة، قد يكون نشرها صعبًا. وأحد أكبر التحديات هو شرط تفعيل سياسة CORS أو CORP لجميع الموارد المتعددة المصادر. لن يحمّل المتصفّح الموارد التي لا تتضمّن هذه العناوين في صفحة تم عزلها عن مصادر متعددة.

وعادةً ما يتم عرض هذه الموارد المتعددة المصادر من قِبل جهات خارجية قد لا يكون من السهل إضافة العناوين اللازمة لها.

ولكن ماذا لو عرفنا أن المورد آمن بما يكفي للتحميل؟ في الواقع، الموارد الوحيدة المعرّضة للخطر هي تلك التي يتم طلبها باستخدام بيانات الاعتماد، لأنّها من المحتمل أن تتضمّن معلومات حساسة لا يستطيع المهاجم تحميلها بأنفسهم. يعني هذا أن الموارد التي يمكن طلبها بدون بيانات الاعتماد تكون متاحة للجميع وتكون آمنة للتحميل.

credentialless في مهمة الإنقاذ

هذا ما يأتي دور COEP: credentialless. credentialless هي قيمة جديدة لعنوان Cross-Origin-Embedder-Policy. وعلى غرار require-corp، يمكنها تفعيل ميزة العزل من مصادر متعددة، ولكن بدلاً من طلب عنوان CORP:cross-origin لطلبات حظر المحتوى من مصادر متعددة، يتم إرسالها بدون بيانات اعتماد (مثل ملفات تعريف الارتباط).

بدلاً من ذلك، ستتمكّن من تفعيل ميزة العزل المشترك المصدر باستخدام العنوانين التاليين:

Cross-Origin-Embedder-Policy: credentialless
Cross-Origin-Opener-Policy: same-origin

يعني ذلك أنّ الخادم المطلوب من مصادر متعددة لن يتمكّن من الردّ باستخدام مورد حساس، ويمكن لمقدِّم الطلب أن يفترض دائمًا أنّ الاستجابة لا تحتوي إلا على معلومات متاحة للجميع.

ويتماشى هذا أيضًا مع خطة المتصفّحات بشأن الإيقاف التدريجي لملفات تعريف الارتباط التابعة لجهات خارجية.

الخصائص الديموغرافية

يمكنك تجربة خيارات متنوعة للعناوين في هذا العرض التوضيحي: https://cross-origin-isolation.glitch.me

الأسئلة الشائعة

هل يمكنني إرسال طلب معتمَد ضمن بيئة credentialless؟

وبالتأكيد، على حساب تغيير وضع الطلب لاشتراط التحقّق من CORS على الاستجابة. بالنسبة إلى علامات HTML مثل <audio> و<img> و<link> و<script> و<video>، ما عليك سوى إلحاق crossorigin="use-credentials" صراحةً لإبلاغ المتصفّح بإرسال طلبات معتمَدة.

على سبيل المثال، حتى إذا احتوى مستند على https://www.example.com على عنوان Cross-Origin-Embedder-Policy: credentialless، سيرسل <img src="https://images.example.com/avatar.png" crossorigin="use-credentials"> طلبًا معتمدًا.

بالنسبة إلى fetch() API، يمكن استخدام request.mode = 'cors'.

إذا كان COEP: credentialless، كيف لا يزال COEP: require-corp مفيدًا لموقعي الإلكتروني؟

لا يتطلّب COEP: require-corp منك تبديل وضع الطلب يدويًا إلى CORS إذا كانت ملفات تعريف الارتباط مطلوبة لبعض الموارد الفرعية المتعددة المصادر.

هل يمكنني أيضًا تحميل إطارات iframe من مصادر متعددة بدون عناوين خاصة ضمن بيئة credentialless؟

لا، لا يزال تحميل إطارات iframe من مصادر متعددة ضمن بيئة credentialless يتطلّب الشروط نفسها المستخدَمة في require-corp. يجب عرض مستندات iframe باستخدام عنوانين:

  • Cross-Origin-Embedder-Policy: credentialless (أو require-corp)
  • Cross-Origin-Resource-Policy: cross-origin

والخبر السار هو أنّ هناك نقاشًا مستمرًا حول السماح بتحميل إطارات iframe من مصادر متعددة بدون هذه العناوين من خلال منح إطارات iframe crossorigin="anonymous". سيسمح هذا الإجراء بتحميل إطارات iframe من مصادر متعددة بدون عناوين ولكن بدون بيانات اعتماد.

هل ستعتمد هذه الميزة على متصفّحات أخرى؟

الميزات التالية

هناك تحديثان إضافيان قادمان للتخفيف من التحديات الأخرى المتعلقة بالعزل المشترك المصدر:

إنّ المستخدمين الذين تسجّلوا في مرحلة التجربة والتقييم في Chrome لتمديد تغيير SharedArrayBuffer بسبب العقبات المذكورة أعلاه قد يتساءلون عن موعد الإغلاق. لقد أعلنّا في الأصل أنّه سيتم إنهاؤها في الإصدار Chrome 96، لكننا قررنا تأجيلها إلى Chrome 106.

المراجِع

تصوير مارتن آدمز على موقع Unسبلاش