تقسيم مساحة التخزين

لمنع أنواع معيّنة من تتبُّع إجراءات المستخدم على مواقع إلكترونية من خلال القنوات الجانبية، قسّم Chrome معظم واجهات برمجة التطبيقات للتخزين والاتصالات في سياقات تابعة لجهات خارجية.

حالة التنفيذ

تم تفعيل هذه الميزة لجميع المستخدمين على الإصدار 115 من Chrome والإصدارات الأحدث. إن اقتراح تقسيم مساحة التخزين متاح لمزيد من المناقشة.

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

ما هي ميزة تقسيم مساحة التخزين؟

لمنع حدوث أنواع معيّنة من تتبُّع القنوات الجانبية على مواقع إلكترونية متعددة، يقسّم Chrome واجهات برمجة التطبيقات للتخزين والاتصالات في سياقات الجهات الخارجية.

وبدون تقسيم مساحة التخزين، يمكن للموقع الإلكتروني ضم البيانات على المواقع الإلكترونية المختلفة لتتبُّع المستخدم على الإنترنت. ويسمح أيضًا للموقع الإلكتروني المضمّن باستنتاج حالات محددة عن المستخدم في الموقع الإلكتروني ذي المستوى الأعلى باستخدام أساليب القنوات الجانبية، مثل هجمات التوقيت وXS-Leaks وCOSI.

في السابق، كان يتم تحديد مساحة التخزين حسب المصدر فقط. وهذا يعني أنّه في حال تضمين إطار iframe من example.com على a.com وb.com، يمكن له التعرّف على عادات التصفح لهذين الموقعين من خلال تخزين معرّف من مساحة التخزين واسترداده بنجاح. عند تفعيل ميزة تقسيم مساحة التخزين التابعة لجهة خارجية، تتوفّر مساحة تخزين في example.com في قسمَين مختلفَين، أحدهما لـ a.com والآخر لـ b.com.

يعني التقسيم بشكل عام أنّ البيانات المخزَّنة بواسطة واجهات برمجة التطبيقات للتخزين مثل مساحة التخزين المحلية وIndexedDB بواسطة iframe لم تعُد متاحة لجميع السياقات من نفس المصدر. بدلاً من ذلك، لا تتوفّر البيانات إلا للسياقات ذات المصدر نفسه ونفس الموقع الإلكتروني ذي المستوى الأعلى.

قبل

رسم توضيحي لواجهات برمجة تطبيقات التخزين بدون تقسيم.
قبل تقسيم مساحة التخزين، يمكن للعنوان example.com كتابة البيانات عند تضمينها على a.com، ثم قراءتها عند تضمينها على b.com.

بعد

رسم تخطيطي لواجهات برمجة تطبيقات التخزين مع التقسيم
بعد تقسيم مساحة التخزين، لا يمكن للنطاق example.com، عند تضمينه في b.com، الوصول إلى مساحة تخزين example.com عند تضمينه في a.com.

تقسيم مساحة التخزين على إطارات iframe المتسلسلة

عندما يحتوي إطار iframe على إطار iframe، يصبح الأمر أكثر تعقيدًا. هذا صحيح بشكل خاص عندما يكون نفس الأصل في أكثر من مكان واحد في السلسلة.

على سبيل المثال، يحتوي A1 على iframe لـ B يحتوي على iframe لـ A2 وكل من A1 وA2 على نفس الموقع. إذا أخذنا في الاعتبار سياقات المستوى الأعلى والمستوى الحالي فقط عند التقسيم، يمكن اعتبار إطار iframe A2 التابع للطرف الأول لأنّه على الموقع الإلكتروني نفسه مثل المستوى الأعلى (A1)، على الرغم من استخدام iframe التابع لجهة خارجية (B) المتداخل. قد يؤدي هذا إلى تعريض A2 لمخاطر أمنية مثل سرقة النقر إذا تمكن A2 من الوصول إلى مساحة تخزين غير مقسمة بشكل افتراضي.

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

عندما لا يتوفّر سياق من مواقع إلكترونية متعددة في السلسلة، لا يتم تقسيم مساحة التخزين. على سبيل المثال، لن يتم تقسيم الموقع A1 الذي يحتوي على iframe في A2 ويحتوي على iframe لـ A3 لـ A1 أو A2 أو A3 لأنّ جميعها في الموقع الإلكتروني نفسه.

بالنسبة إلى المواقع الإلكترونية التي تحتاج إلى وصول غير مُقسَّم من خلال إطارات iframe المتعددة، يجرّب Chrome توسيع نطاق واجهة برمجة التطبيقات Storage Access API لتفعيل حالة الاستخدام هذه. ونظرًا لأن واجهة برمجة التطبيقات Storage Access API تتطلب من الموقع الإلكتروني ذي الإطار استدعاء واجهة برمجة التطبيقات بشكل صريح، فإن ذلك يخفف من خطر الاستيلاء على النقرات.

واجهات برمجة التطبيقات المحدَّثة

يمكن تقسيم واجهات برمجة التطبيقات المتأثرة بالتقسيم إلى المجموعات التالية:

واجهات برمجة تطبيقات التخزين

  • نظام الحصص
    يُستخدم نظام الحصة لتحديد حجم مساحة القرص المخصّصة للتخزين. يدير نظام الحصة كل قسم كحزمة منفصلة لتحديد مقدار المساحة المسموح بها ومتى يتم محوها.
    تعرض السمة navigator.storage.estimate() معلومات التقسيم. سيتم إيقاف واجهات برمجة التطبيقات المخصّصة لمتصفِّح Chrome فقط، مثل window.webkitStorageInfo وnavigator.webkitTemporaryStorage.
    تستخدم IndexedDB وذاكرة التخزين المؤقت نظام الحصص المقسَّمة الجديد.
  • Web Storage API
    توفّر واجهة Web Storage API آليات يمكن للمتصفّحات من خلالها تخزين أزواج المفاتيح/القيم. هناك آليتان: مساحة التخزين المحلية ومساحة تخزين الجلسات. ولا تخضع هذه الأجهزة لإدارة الحصة حاليًا، ولكن لا تزال مقسَّمة.
  • نظام الملفات الخاصة الأصلي
    تتيح File System Access API للموقع الإلكتروني قراءة التغييرات أو حفظها مباشرةً في الملفات والمجلدات على الجهاز بعد أن يمنح المستخدم المستخدم الإذن بالوصول. يتيح نظام Origin Private File System للمصدر تخزين المحتوى الخاص على القرص، بحيث يمكن للمستخدم الوصول إليه بسهولة وتقسيمه.
  • واجهة برمجة تطبيقات حزمة التخزين
    يتم تطوير واجهة برمجة تطبيقات Storage Bucket لتستخدم Storage Standard ودمج واجهات برمجة التطبيقات المختلفة للتخزين، مثل IndexedDB وlocalStorage باستخدام مفهوم جديد يُسمى "الحزم". ويتم تقسيم البيانات المخزَّنة في الحُزم والبيانات الوصفية المرتبطة بالحِزم.
  • عنوان مسح الموقع الإلكتروني
    يسمح تضمين عنوان Clear-Site-Data في الاستجابة للخادم بطلب محو البيانات المخزَّنة في متصفّح المستخدم. يمكن محو ذاكرة التخزين المؤقت وملفات تعريف الارتباط وتخزين DOM. يؤدي استخدام العنوان إلى محو مساحة التخزين في قسم واحد فقط.
  • متجر Blob URL
    blob هو كائن يحتوي على البيانات الأولية المراد معالجتها، ويمكن إنشاء عنوان URL للكائن blob للوصول إلى المورد. لا يتم تقسيم متاجر عناوين URL الثنائية. لتوفير حالة استخدام عند الانتقال في سياق ذي مستوى أعلى إلى أي عنوان URL ذي كائن ثنائي المستوى (مناقشة)، قد يتم تقسيم مخزن عنوان URL الخاص بكائن ثنائي المستويات عن طريق مجموعة الوكلاء بدلاً من موقع المستوى الأعلى. هذه الميزة غير متاحة للاختبار بعد، ويمكن أن تتغيّر آلية التقسيم في المستقبل.

واجهات برمجة تطبيقات الاتصالات

يتم أيضًا تقسيم واجهات برمجة تطبيقات الاتصال التي تتيح لسياق واحد التواصل بين حدود المصدر بالإضافة إلى واجهات برمجة تطبيقات التخزين. تؤثر التغييرات بشكل أساسي في واجهات برمجة التطبيقات التي تسمح باكتشاف سياقات أخرى عبر البث أو موعد من المصدر نفسه.

بالنسبة إلى واجهات برمجة التطبيقات للاتصال التالية، لم يعد بإمكان إطار iframe التابع لجهة خارجية الاتصال بسياقه من المصدر نفسه:

  • قناة بث
    تتيح واجهة Broadcast Channel API التواصل بين سياقات التصفح (النوافذ أو علامات التبويب أو إطارات iframe) والعاملين من نفس المصدر.
    إطار iframe postMessage() في عدة مواقع إلكترونية حيث لا يتم اقتراح تغيير العلاقة بين السياقات بوضوح
  • SharedWorker
    توفّر واجهة برمجة التطبيقاتSharedWorker API عاملاً يمكن الوصول إليه من خلال سياقات التصفّح من المصدر نفسه.
  • أقفال الويب
    تسمح واجهة Web Locks API للرموز البرمجية التي يتم تشغيلها في علامة تبويب واحدة أو عامل من المصدر نفسه بقفل مورد مشترك أثناء تنفيذ بعض الأعمال.

واجهة برمجة تطبيقات Service Worker

توفّر Service Worker API واجهة لإجراء المهام في الخلفية. تنشئ المواقع الإلكترونية عمليات تسجيل دائمة تنشئ سياقًا جديدًا للعاملين للاستجابة للأحداث، ويمكن لهذا العامل التواصل من خلال أي سياق من المصدر نفسه. بالإضافة إلى ذلك، يمكن لواجهة Service Worker API تغيير توقيت طلبات التنقّل، ما يؤدي إلى احتمال تسرُّب المعلومات على مواقع إلكترونية متعددة، مثل تحليل السجلّ.

ولذلك، يتم تقسيم عاملي الخدمة المسجَّلين من سياق تابع لجهة خارجية.

واجهات برمجة التطبيقات للإضافات

الإضافات هي برامج تتيح للمستخدمين تخصيص تجربة التصفح.

يمكن تضمين صفحات الإضافات (الصفحات التي تتضمّن مخطط chrome-extension://) في مواقع إلكترونية على الويب، وفي هذه الحالات، يمكن لتلك الصفحات مواصلة الوصول إلى القسم ذي المستوى الأعلى. يمكن لهذه الصفحات أيضًا تضمين مواقع إلكترونية أخرى، وفي هذه الحالة، يمكن لهذه المواقع الإلكترونية الوصول إلى القسم ذي المستوى الأعلى الخاص بها ما دامت الإضافة لديها أذونات مضيف لهذا الموقع الإلكتروني.

لمزيد من المعلومات، راجِع مستندات الإضافات.

عرض توضيحي: اختبار تقسيم مساحة التخزين

موقع إلكتروني تجريبي: https://storage-partitioning-demo-site-a.glitch.me/

لقطة شاشة للموقع الإلكتروني التجريبي تُظهر جميع علامات التجزئة الخضراء على اليسار والتقاطعات الحمراء على اليمين لكل اختبار.
لقطة شاشة للعرض التوضيحي تُظهر نتيجة متصفّح يتم فيه تقسيم مساحة التخزين على يمين الشاشة، وبدون تقسيم مساحة التخزين على اليسار.

يستخدم العرض التوضيحي موقعَين: الموقع (أ) والموقع (ب).

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

في الوقت الحالي، يمكنك إيقاف ميزة تقسيم مساحة التخزين في Chrome من خلال ضبط العلامة chrome://flags/#third-party-storage-partitioning في متصفّح Chrome على disabled للتأكّد من أنّ هذا الإجراء سيؤدي إلى تعذُّر اختبار التقسيم.

ويمكنك أيضًا اختبار المتصفحات الأخرى بالطريقة نفسها لمعرفة حالة التقسيم الخاصة بها.

التفاعل ومشاركة الملاحظات