يتضمّن الإصدار 67 من Chrome على أجهزة الكمبيوتر المكتبي ميزة جديدة تُعرف باسم عزل المواقع الإلكترونية ويتم تفعيلها تلقائيًا. توضّح هذه المقالة كل ما يتعلق بميزة "عزل المواقع الإلكترونية" وسبب أهمّيتها وأهميتها بالنسبة إلى مطوّري البرامج على الويب.
ما هي ميزة "عزل المواقع الإلكترونية"؟
إنّ الإنترنت مخصّص لمشاهدة فيديوهات القطط وإدارة محافظ العملات المشفّرة، من بين أمور أخرى،
ولكن لا تريد أن يتمكّن fluffycats.example
من الوصول إلى عملاتك المشفّرة القيّمة. لحسن الحظ،
لا يمكن للمواقع الإلكترونية عادةً الوصول إلى بيانات بعضها البعض داخل المتصفّح بفضل سياسة
المصدر نفسه. ومع ذلك، قد تحاول المواقع الإلكترونية الضارّة تجاوز هذه السياسة لمهاجمة مواقع إلكترونية أخرى، ويُعثر أحيانًا على أخطاء أمنية في رمز المتصفّح الذي يفرض "سياسة المصدر نفسه". يهدف فريق Chrome إلى إصلاح هذه الأخطاء في أسرع وقت ممكن.
عزل المواقع الإلكترونية هي ميزة أمان في Chrome توفّر خط دفاع إضافيًا لجعل احتمال نجاح هذه الهجمات أقل. تضمن هذه الميزة وضع الصفحات من مواقع إلكترونية مختلفة في عمليات مختلفة دائمًا، ويتم تشغيل كل عملية في وضع حماية يحدّ من الإجراءات المسموح بها لها. وتحظر هذه الميزة أيضًا العملية من تلقّي أنواع معيّنة من البيانات الحسّاسة من مواقع إلكترونية أخرى. نتيجةً لذلك، باستخدام ميزة "عزل المواقع الإلكترونية"، يصبح من الصعب على الموقع الإلكتروني الضار استخدام هجمات قنوات جانبية نظرية، مثل Spectre، لسرقة البيانات من المواقع الإلكترونية الأخرى. مع انتهاء فريق Chrome من تنفيذ إجراءات إضافية، ستساعد ميزة "عزل الموقع" أيضًا حتى عندما يتعذّر على صفحة المهاجم خرق بعض القواعد في العملية الخاصة بها.
يصعِّب ميزة "عزل الموقع" على المواقع الإلكترونية غير الموثوق بها الوصول إلى معلومات حساباتك على مواقع إلكترونية أخرى أو سرقتها. ويقدّم البرنامج حماية إضافية من أنواع مختلفة من الأخطاء الأمنية، مثل هجمات قناة جانبية Meltdown وSpectre الأخيرة.
لمزيد من التفاصيل حول ميزة "عزل المواقع الإلكترونية"، يُرجى الاطّلاع على مقالتنا على مدوّنة أمان Google.
حظر القراءة من مصادر متعددة
حتى في حال وضع جميع الصفحات على مستوى عدّة مواقع إلكترونية في عمليات منفصلة، لا يزال بإمكان الصفحات طلب
بعض الموارد الفرعية على مستوى عدّة مواقع إلكترونية بشكل مشروع، مثل الصور وJavaScript. يمكن أن تستخدم صفحة ويب ضارة عنصرًا
<img>
لتحميل ملف JSON يحتوي على بيانات حسّاسة، مثل رصيدك المصرفي:
<img src="https://your-bank.example/balance.json" />
<!-- Note: the attacker refused to add an `alt` attribute, for extra evil points. -->
في حال عدم تفعيل ميزة "عزل الموقع الإلكتروني"، ستنتقل محتويات ملف JSON إلى ذاكرة عملية عرض الإعلانات، وعندها يلاحظ مُعرِض الإعلانات أنّه ليس تنسيق صورة صالحًا ولا يعرض صورة. ولكن يمكن للمهاجم بعد ذلك استغلال ثغرة أمنية مثل Spectre لقراءة جزء من الذاكرة.
بدلاً من استخدام <img>
، يمكن للمهاجم أيضًا استخدام <script>
لحفظ البيانات الحساسة في
الذاكرة:
<script src="https://your-bank.example/balance.json"></script>
إنّ ميزة "حظر القراءة من مصادر متعددة" (المعروفة اختصارًا باسم CORB) هي ميزة أمان جديدة تمنع محتوى
"balance.json
" من الدخول نهائيًا إلى ذاكرة معالجة العارض استنادًا إلى نوع MIME الخاص به.
لنطّلع على آلية عمل ميزة CORB. يمكن لموقع إلكتروني طلب نوعَين من الموارد من خادم:
- موارد البيانات، مثل مستندات HTML أو XML أو JSON
- موارد الوسائط، مثل الصور أو JavaScript أو CSS أو الخطوط
يمكن لموقع إلكتروني تلقّي مصادر بيانات من مصدره الخاص أو من مصادر أخرى باستخدام عناوين CORS المسموح بها، مثل Access-Control-Allow-Origin: *
. من ناحية أخرى، يمكن تضمين موارد الوسائط من أي مصدر، حتى بدون استخدام عناوين CORS المتساهلة.
يمنع CORB عملية عرض الصفحة من تلقّي مصدر بيانات من مصدر مختلف (أي HTML أو XML أو JSON) في الحالات التالية:
- يحتوي المرجع على عنوان
X-Content-Type-Options: nosniff
- لا تسمح سياسة مشاركة الموارد المتعددة المصادر (CORS) صراحةً بالوصول إلى المورد
إذا لم يكن مصدر البيانات من مصدر مختلف قد ضبط العنوان X-Content-Type-Options: nosniff
،
يحاول CORB فحص محتوى الاستجابة لتحديد ما إذا كان بتنسيق HTML أو XML أو JSON. ويُعدّ ذلك
ضروريًا لأنّ بعض خوادم الويب تم ضبطها بشكل غير صحيح وتعرض الصور على أنّها text/html
، على سبيل المثال.
يتم عرض موارد البيانات التي تم حظرها بموجب سياسة CORB على أنّها فارغة للعملية، على الرغم من أنّه لا يزال الطلب يتم في الخلفية. نتيجةً لذلك، تواجه صفحة الويب الضارّة صعوبة في سحب البيانات من مواقع إلكترونية متعددة لاستخدامها في عملية السرقة.
للحصول على أفضل مستوى من الأمان والاستفادة من ميزة CORB، ننصحك بما يلي:
- ضَع علامة على الردود باستخدام عنوان
Content-Type
الصحيح. (على سبيل المثال، يجب عرض موارد HTML على أنّهاtext/html
وموارد JSON مع نوع JSON MIME وموارد XML ذات نوع MIME بتنسيق XML). - يمكنك إيقاف عملية الاستيلاء على البيانات باستخدام العنوان
X-Content-Type-Options: nosniff
. بدون هذا العنوان، يُجري Chrome تحليلاً سريعًا للمحتوى لمحاولة تأكيد صحة النوع، ولكن بما أنّه يميل إلى السماح بمرور الردود لتجنُّب حظر عناصر مثل ملفات JavaScript، من الأفضل أن تُجري أنت الإجراء الصحيح بنفسك.
لمعرفة مزيد من التفاصيل، يمكنك الاطّلاع على مقالة CORB الخاصة بمطوّري البرامج على الويب أو الشرح المفصّل لـ CORB.
لماذا يجب أن يهتم مطوّرو الويب بميزة "عزل المواقع الإلكترونية"؟
في معظم الأحيان، تكون ميزة "عزل المواقع الإلكترونية" ميزة في المتصفّح تعمل في الخلفية ولا تظهر مباشرةً لمطوّري الويب. على سبيل المثال، لا تتوفّر واجهة برمجة تطبيقات جديدة متاحة على الويب للتعرّف عليها. بشكل عام، لن تلاحظ صفحات الويب أي فرق عند تشغيلها باستخدام ميزة "عزل المواقع الإلكترونية" أو بدونها.
ومع ذلك، هناك بعض الاستثناءات لهذه القاعدة. ينتج عن تفعيل ميزة "عزل الموقع" بعض الآثار الجانبية البسيطة التي قد تؤثر في موقعك الإلكتروني. نحتفظ بقائمة بمشاكل عزل المواقع الإلكترونية المعروفة، ونوضّح أهم هذه المشاكل أدناه.
لم يعد تنسيق الصفحة الكاملة متزامنًا
باستخدام ميزة "عزل المواقع الإلكترونية"، لم يعُد التنسيق الكامل للصفحة متزامنًا، لأنّ إطارات الصفحة قد يتم توزيعها الآن على عمليات متعددة. قد يؤثر هذا على الصفحات إذا افترضوا أن تغيير التنسيق ينتشر فورًا على جميع الإطارات في الصفحة.
على سبيل المثال، لنفترض أنّ هناك موقعًا إلكترونيًا باسم fluffykittens.example
يتواصل مع ملف شخصي مصغر
اجتماعي مستضاف على social-widget.example
:
<!-- https://fluffykittens.example/ -->
<iframe src="https://social-widget.example/" width="123"></iframe>
<script>
const iframe = document.querySelector('iframe');
iframe.width = 456;
iframe.contentWindow.postMessage(
// The message to send:
'Meow!',
// The target origin:
'https://social-widget.example'
);
</script>
في البداية، يبلغ عرض <iframe>
في التطبيق المصغّر للشبكات الاجتماعية 123
بكسل. ولكن بعد ذلك، تغيّر صفحة FluffyKittens العرض إلى 456
بكسل (تنسيق التشغيل) وترسل رسالة إلى أداة التواصل الاجتماعي، التي تحتوي على الرمز التالي:
<!-- https://social-widget.example/ -->
<script>
self.onmessage = () => {
console.log(document.documentElement.clientWidth);
};
</script>
عندما تتلقّى الأداة المصغّرة للمحتوى الاجتماعي رسالة من خلال واجهة برمجة التطبيقات postMessage
API، تسجِّل عرض
عنصر <html>
الجذر.
ما هي قيمة العرض التي يتم تسجيلها؟ قبل تفعيل ميزة "عزل المواقع الإلكترونية" في Chrome، كانت الإجابة 456
. يؤدي الوصول إلى document.documentElement.clientWidth
إلى فرض التنسيق، الذي كان متزامنًا قبل أن يفعّل Chrome ميزة "عزل الموقع الإلكتروني". ومع ذلك، عند تفعيل ميزة "عزل المواقع الإلكترونية"، تتم إعادة ترتيب التطبيقات المصغّرة للشبكات الاجتماعية من مصادر متعددة الآن بشكل غير متزامن في عملية منفصلة. وبالتالي، يمكن أن تكون الإجابة الآن أيضًا
123
، أي القيمة القديمة width
.
إذا غيّرت صفحة حجم <iframe>
من مصدر مختلف، ثم أرسلت إليها postMessage
، قد لا يعرف الإطار المستلِم حجمه الجديد بعد عند تلقّي الرسالة في حال تفعيل ميزة
عزل الموقع الإلكتروني. بشكلٍ
عام، قد يؤدي ذلك إلى تعطُّل الصفحات إذا افترضت أنّ تغيير التنسيق يسري على الفور على جميع
اللقطات في الصفحة.
في هذا المثال بالتحديد، سيؤدي الحلّ الأكثر فعالية إلى ضبط width
في الإطار الرئيسي،
ورصد هذا التغيير في <iframe>
من خلال الاستماع إلى حدث resize
.
قد تنتهي مهلة معالِجات إلغاء التحميل بشكل متكرر.
عندما يتنقل إطار أو يغلقه، يتم تشغيل كل من المستند القديم وأي مستندات إطار فرعي مضمّنة فيه
معالِج unload
الخاص به. إذا حدثت عملية التنقّل الجديدة في عملية عرض المحتوى نفسها (مثل
عملية تنقّل من مصدر مماثل)، يمكن تشغيل unload
معالِجات المستند القديم وإطاراته الفرعية لعدة
دقائق قبل السماح بتنفيذ عملية التنقّل الجديدة.
addEventListener('unload', () => {
doSomethingThatMightTakeALongTime();
});
في هذه الحالة، تكون عناصر التحكّم في unload
في جميع اللقطات موثوقة جدًا.
ومع ذلك، حتى في حال عدم تفعيل ميزة "عزل المواقع الإلكترونية"، يتم تنفيذ بعض عمليات التنقّل في الإطار الرئيسي على مستوى جميع العمليات، ما يؤثّر في سلوك معالج إغلاق التطبيق. على سبيل المثال، إذا انتقلت من old.example
إلى new.example
عن طريق كتابة
عنوان URL في شريط العناوين، يتم الانتقال إلى new.example
في عملية جديدة. يتم تشغيل معالجات old.example
التفريغ وإطاراتها الفرعية في عملية old.example
في الخلفية،
بعد عرض صفحة new.example
، ويتم إنهاء معالجات التفريغ القديمة إذا لم يتم
إنهائها خلال مهلة معيّنة. ولأنّ معالجات التفريغ قد لا تنتهي قبل انتهاء مهلة الانتظار،
يكون سلوك التفريغ أقل موثوقية.
باستخدام ميزة "عزل المواقع الإلكترونية"، تصبح جميع عمليات التنقّل بين المواقع الإلكترونية متعددة العمليات، بحيث لا تشترك المستندات من
مواقع إلكترونية مختلفة في عملية مع بعضها البعض. ونتيجةً لذلك، ينطبق الموقف أعلاه في المزيد من الحالات، وغالبًا ما تتضمّن معالِجات إلغاء التحميل في <iframe>
سلوك الخلفية ومهلة الاستجابة الموضّحة أعلاه.
هناك فرق آخر نتيجةً لاستخدام ميزة "عزل المواقع الإلكترونية"، وهو الترتيب الجديد المتوازي لمعالجات التفريغ: بدون ميزة "عزل المواقع الإلكترونية"، يتم تشغيل معالجات التفريغ بترتيب صارم من الأعلى إلى الأسفل على مستوى اللقطات. ولكن باستخدام ميزة "عزل الموقع الإلكتروني"، يتم تشغيل معالجات التفريغ بشكل موازٍ في عمليات مختلفة.
هذه هي النتائج الأساسية لتفعيل ميزة "عزل المواقع الإلكترونية". يعمل فريق Chrome على تحسين موثوقية معالِجات إلغاء التحميل لحالات الاستخدام الشائعة، كلما أمكن ذلك. نحن أيضًا على دراية بالأخطاء التي تمنع معالجات تفريغ الإطارات الفرعية من استخدام ميزات معيّنة، ونحن مشغولون بحلّها.
من الحالات المهمة لمعالجات إلغاء التحميل هي إرسال إشعارات نهاية الجلسة. ويتم ذلك عادةً على النحو التالي:
addEventListener('pagehide', () => {
const image = new Image();
img.src = '/end-of-session';
});
في ضوء هذا التغيير، ننصحك باستخدام navigator.sendBeacon
بدلاً من ذلك:
addEventListener('pagehide', () => {
navigator.sendBeacon('/end-of-session');
});
إذا كنت بحاجة إلى مزيد من التحكّم في الطلب، يمكنك استخدام الخيار keepalive
في Fetch API:
addEventListener('pagehide', () => {
fetch('/end-of-session', {keepalive: true});
});
الخاتمة
تصعِّب ميزة "عزل المواقع الإلكترونية" على المواقع الإلكترونية غير الموثوق بها الوصول إلى معلومات حساباتك على مواقع إلكترونية أخرى أو سرقتها من خلال عزل كل موقع إلكتروني في عملية خاصة به. وفي إطار ذلك، يحاول CORB إبعاد موارد البيانات الحساسة عن عملية العارض. تضمن لك اقتراحاتنا أعلاه الاستفادة إلى أقصى حد من ميزات الأمان الجديدة هذه.
نشكر كلًا من أليكس موشكوك، تشارلي ريس، جيسون ميلر، ناسكو أوسكوف، فيليب والتون، شوبي بانيكير، توماس شتاينر على قراءة مسودة هذه المقالة وتقديم ملاحظاتهم.