تعرَّف على سبب أهمية حظر الوصول من نطاقات أخرى لتتمكّن من استخدام ميزات فعّالة، مثل SharedArrayBuffer
وperformance.measureUserAgentSpecificMemory()
وموقّت بدقة عالية بدقة أفضل.
مقدمة
في مقالة جعل موقعك الإلكتروني "يعزل المحتوى المشترك المصدر" باستخدام COOP أوضحنا سياسة خصوصية المستهلك في كاليفورنيا (COEP) كيفية اعتماد "الارتباط المشترك المنشأ". معزولة" باستخدام COOP وCOEP. هذه مقالة مصاحبة تشرح سبب ضرورة استخدام ميزة حظر الوصول من نطاقات أخرى لتفعيل ميزات فعّالة على المتصفّح.
الخلفية
يعتمد الويب على المصدر نفسه
السياسة: ميزة أمان تحدّ من
طريقة تفاعل المستندات والنصوص البرمجية مع موارد من مصدر آخر. هذا النمط
يقيد الطرق التي يمكن بها لمواقع الويب الوصول إلى الموارد المشتركة المنشأ. بالنسبة
على سبيل المثال، تم منع مستند من https://a.example
من الوصول إلى البيانات
تمت استضافته على https://b.example
.
ومع ذلك، كان لسياسة المصدر نفسه بعض الاستثناءات السابقة. يمكن لأي موقع إلكتروني:
- تضمين إطارات iframe من مصادر متعددة
- تضمين موارد من مصادر متعددة، مثل الصور أو النصوص البرمجية
- فتح النوافذ المنبثقة من مصادر متعددة مع مرجع DOM
إذا كان هناك إمكانية لتصميم الويب من البداية، لما كانت هذه الاستثناءات موجودة. ولسوء الحظ، بحلول الوقت الذي أدرك فيه منتدى الويب الفوائد الرئيسية سياسة صارمة بشأن المصدر نفسه، كان الويب يعتمد على هذه الاستثناءات.
تم تصحيح الآثار الجانبية الأمنية لهذه السياسة المتساهلة ذات المصدر نفسه في قسمين
وطرق. إحدى الطرق كانت من خلال طرح بروتوكول جديد يسمى خوارزمي
مشاركة موارد المصدر (CORS)
والغرض منه هو التأكد من أن الخادم يسمح بمشاركة أحد الموارد مع
أصل معين. أما الطريقة الأخرى، فهي إزالة إمكانية الوصول المباشر إلى النص البرمجي ضمنًا
موارد من مصادر متعددة مع الحفاظ على التوافق مع الأنظمة القديمة. مثل
يُطلق على الموارد متعددة المصادر اسم "غير مفهومة" الموارد. على سبيل المثال، هذا هو السبب
معالجة وحدات البكسل في صورة من مصادر متعددة عبر CanvasRenderingContext2D
ما لم يتم تطبيق سياسة مشاركة الموارد المتعددة المصادر (CORS) على الصورة.
ويتم اتخاذ جميع القرارات المتعلقة بالسياسات ضمن مجموعة سياقية للتصفّح.
ولفترة طويلة، كان الجمع بين سياسة مشاركة الموارد المتعددة المصادر (CORS) والموارد المبهمة كافيًا مدى أمان المتصفحات. وأحيانًا تكون الحالات الحدّية (مثل JSON) الثغرات الأمنية) واحتاجت إلى تصحيحها، ولكن بشكل عام مبدأ عدم السماح بالوصول المباشر للقراءة إلى وحدات البايت الأولية للموارد متعددة المصادر وناجح.
تغير كل هذا مع
Spectre
يؤدي إلى إنشاء أي بيانات يتم تحميلها إلى مجموعة سياقات التصفّح نفسها الخاصة بالرمز البرمجي
يمكن قراءتها فمن خلال قياس الوقت الذي تستغرقه عمليات معينة، يستطيع المهاجمون
يمكننا تخمين محتويات ذاكرات التخزين المؤقت لوحدة المعالجة المركزية، ومن خلالها، يتم تحميل
المعالجة الذاكرة. يمكن استخدام موقِّتات منخفضة الدقة لفرض هجمات على ضبط التوقيت.
التي تتوفّر على المنصة، ولكن يمكن تسريعها باستخدام موقّتات عالية الدقة
كل من المحتوى الفاضح (مثل performance.now()
) وضمني (مثل
SharedArrayBuffer
). إذا ضمّن evil.com
صورة من مصادر متعددة، يمكنه استخدام
هجوم الطيف لقراءة بيانات البكسل، وهو ما يجعل إجراءات الحماية تعتمد على
"التعتيم" غير فعال.
من الناحية المثالية، يجب أن يدقق الخادم في جميع الطلبات الواردة من مصادر متعددة. الذي يملك المورد. إذا لم يتم توفير التدقيق من قبل الخادم الذي يمتلك الموارد، فلن تصل البيانات إلى عملية التصفح شخص شرير، وبالتالي ستظل بعيدة عن أي شخص في Spectre التي تهاجم صفحة ويب يمكن أن تنفذها. وهو ما نسميه حالة حظر الوصول من نطاقات أخرى. هذا هو بالضبط ما تعنيه COOP+COEP.
بموجب عزل المواقع الإلكترونية من مصادر متعددة، يُعتبر الموقع الإلكتروني الذي يطلب الوصول أقل من غيره
خطيرًا وهذا يكشف لك عن ميزات قوية مثل SharedArrayBuffer
،
performance.measureUserAgentSpecificMemory()
ودقة عالية
الموقتات بدقة أفضل وهو ما يمكن أن
تُستخدم بخلاف ذلك في هجمات تشبه Spectre. كما أنه يمنع تعديل
document.domain
سياسة أداة تضمين المحتوى من مصادر متعددة
أداة التضمين متعددة المصادر تمنع السياسة (COEP) من تحميل أيّ موارد من مصادر متعددة لا تمنح المستخدمين أذونات إذن المستند (باستخدام CORP أو CORS). باستخدام هذه الميزة، يمكنك الإفصاح عن أنّه لا يمكن للمستند تحميل هذه الموارد.
لتفعيل هذه السياسة، أضِف عنوان HTTP التالي إلى المستند:
Cross-Origin-Embedder-Policy: require-corp
إنّ الكلمة الرئيسية require-corp
هي القيمة الوحيدة المقبولة لـ COEP. يفرض ذلك
عدم السماح للمستند بتحميل الموارد إلا من المصدر نفسه
تم وضع علامة واضحة على الموارد كقابلة للتحميل من مصدر آخر.
لإتاحة إمكانية تحميل الموارد من مصدر آخر، يجب أن تتوافق الموارد مع أي مما يلي: مشاركة الموارد المتعدّدة المصادر (CORS) أو سياسة الموارد المتعدّدة المصادر (CORP).
مشاركة المصادر المتعدّدة المصادر
إذا كان أحد الموارد من مصادر متعددة يتيح مشاركة الموارد المتعدّدة المصادر
(CORS)، يمكنك استخدام
crossorigin
السمة
لتحميلها إلى صفحة الويب الخاصة بك بدون حظرها بواسطة COEP.
<img src="https://third-party.example.com/image.jpg" crossorigin>
على سبيل المثال، إذا تم عرض مورد الصور هذا باستخدام عناوين CORS، استخدم
crossorigin
لكي يستخدم طلب استرجاع المورد CORS
. هذا أيضًا
يمنع تحميل الصورة ما لم يتم تعيين عناوين CORS.
وبالمثل، يمكنك جلب البيانات من مصادر متعددة من خلال طريقة fetch()
التي
لا تتطلب معالجة خاصة طالما أن الخادم يستجيب باستخدام الرمز الصحيح
بروتوكول HTTP
.
سياسة الموارد المتعددة المصادر
سياسة الموارد المتعددة المصادر (CORP) في الأصل كموافقة لحماية مواردك من تم تحميلها من قِبل مصدر آخر. في سياق سياسة COEP، يمكن لـ CORP تحديد المورد سياسة المالك حول من يمكنه تحميل مورد.
يأخذ عنوان Cross-Origin-Resource-Policy
ثلاث قيم محتملة:
Cross-Origin-Resource-Policy: same-site
لا يمكن تحميل الموارد التي تم وضع علامة same-site
عليها إلا من الموقع الإلكتروني نفسه.
Cross-Origin-Resource-Policy: same-origin
لا يمكن تحميل الموارد التي تم وضع علامة same-origin
عليها إلا من المصدر نفسه.
Cross-Origin-Resource-Policy: cross-origin
يمكن تحميل الموارد التي تم وضع علامة cross-origin
عليها من خلال أي موقع إلكتروني. (This
تمت إضافة value إلى
مواصفات CORP إلى جانب COEP).
سياسة التطبيقات المتعددة المصادر
سياسة التطبيقات المتعددة المصادر
(COOP) تتيح لك ضمان
أن نافذة المستوى الأعلى يتم عزلها عن المستندات الأخرى من خلال وضعها في
مختلفة ضمن مجموعة سياقات تصفح مختلفة، بحيث لا يمكنها التفاعل بشكل مباشر مع
نافذة ذات مستوى أعلى. على سبيل المثال، إذا فتح مستند مع COOP نافذة منبثقة،
سيكون الموقع الإلكتروني window.opener
null
. كذلك، سمة .closed
الذي يشير إليه الكلمة الافتتاحية: true
.
يأخذ عنوان Cross-Origin-Opener-Policy
ثلاث قيم محتملة:
Cross-Origin-Opener-Policy: same-origin
يمكن للمستندات التي تم وضع علامة same-origin
عليها أن تشارك سياق التصفّح نفسه.
مجموعة مستندات المصدر نفسه والتي تم وضع علامة same-origin
عليها بشكل صريح أيضًا.
Cross-Origin-Opener-Policy: same-origin-allow-popups
يحتفظ مستند المستوى الأعلى الذي يتضمن same-origin-allow-popups
بالمراجع إلى أي
من نوافذها المنبثقة التي لم يتم ضبط سياسة سياسة مشاركتها (COOP) أو التي تختار إلغاء العزلة عن طريق
ضبط COOP لـ unsafe-none
.
Cross-Origin-Opener-Policy: unsafe-none
unsafe-none
هو الخيار التلقائي ويسمح بإضافة المستند إلى أداة الفتح
مجموعة سياق التصفّح ما لم تتضمّن أداة الفتح نفسها COOP بقيمة same-origin
.
ملخّص
إذا أردت الوصول المضمون إلى ميزات فعّالة مثل SharedArrayBuffer
،
performance.measureUserAgentSpecificMemory()
أو دقة عالية
الموقتات بدقة أفضل، تذكَّر
أن المستند يحتاج إلى استخدام كل من COEP بقيمة require-corp
COOP بقيمة same-origin
. وفي حالة عدم وجود أي منهما، فإن المتصفح
لا تضمن عزلًا كافيًا لتمكين هذه الميزات الفعالة بأمان. إِنْتَ
تحديد وضع صفحتك من خلال التحقق مما إذا
self.crossOriginIsolated
بإرجاع true
.
تعرَّف على خطوات تنفيذ ذلك في مقالة جعل موقعك الإلكتروني "مشتركًا من مصادر متعددة". معزولة" باستخدام COOP وCOEP.