لمنع أنواع معيّنة من تتبُّع إجراءات المستخدم على مواقع إلكترونية متعددة على جميع القنوات، قسّم Chrome معظم واجهات برمجة التطبيقات للتخزين والمراسلات في سياقات تابعة لجهات خارجية.
حالة التنفيذ
تم تفعيل الميزة لجميع المستخدمين الذين يستخدمون الإصدار 115 من Chrome والإصدارات الأحدث. إنّ اقتراح تقسيم مساحة التخزين متاح للمناقشة.
ما هو تقسيم مساحة التخزين؟
لمنع أنواع معيّنة من تتبُّع إجراءات المستخدم على مواقع إلكترونية متعددة على جميع القنوات، يعمل Chrome على تقسيم واجهات برمجة التطبيقات للتخزين والمراسلات في سياقات تابعة لجهات خارجية.
بدون تقسيم مساحة التخزين، يمكن لموقع إلكتروني دمج البيانات على مستوى مواقع إلكترونية مختلفة لتتبُّع المستخدم على الويب. ويسمح أيضًا للموقع الإلكتروني المضمّن باستنتاج حالات معيّنة عن المستخدم في الموقع الإلكتروني من المستوى الأعلى باستخدام تقنيات القناة الجانبية، مثل هجمات التوقيت و XS-Leaks و COSI.
في السابق، كان يتم استخدام مصدر البيانات فقط كمفتاح لمساحة التخزين. وهذا يعني أنّه إذا تم تضمين ملف div مضمّن من example.com
في a.com
وb.com
، يمكنه التعرّف على عادات التصفّح في هذين الموقعَين الإلكترونيَين من خلال تخزين معرّف واسترداده بنجاح من مساحة التخزين. عند تفعيل ميزة "تقسيم مساحة التخزين التابعة لجهة خارجية"،
تتوفر مساحة التخزين لتطبيق example.com
في قسمَين مختلفَين، أحدهما لتطبيق a.com
والآخر لتطبيق b.com
.
ويعني التقسيم بشكل عام أنّ البيانات المخزّنة من خلال واجهات برمجة تطبيقات التخزين، مثل IndexedDB و"التخزين على الجهاز" من خلال إطار iframe، لم تعُد متاحة لجميع السياقات في المصدر نفسه. بدلاً من ذلك، تتوفّر البيانات فقط للسياقات التي تتضمن المصدر نفسه والموقع الإلكتروني نفسه من المستوى الأعلى.
تقسيم مساحة التخزين في إطارات iframe المتسلسلة
وعندما يحتوي إطار iframe على إطار iframe، يصبح الأمر أكثر تعقيدًا. وينطبق ذلك بشكل خاص عندما يكون المصدر نفسه في أكثر من مكان في السلسلة.
على سبيل المثال، تحتوي A1 على إطار iframe لصفحة B التي تحتوي على إطار iframe لصفحة A2، ويقع كلا الموقعَين الإلكترونيَين A1 وA2 على الموقع الإلكتروني نفسه. إذا أخذنا في الاعتبار السياقات ذات المستوى الأعلى والمستوى الحالي فقط عند التقسيم، يمكن اعتبار إطار iFrame A2 تابعًا لجهة أولى لأنّه على الموقع الإلكتروني نفسه الذي يتضمّن السياق الأعلى (A1) على الرغم من إطار iFrame التابع لجهة خارجية (B) الذي يتوسط بينهما. وقد يؤدي ذلك إلى تعريض A2 لمخاطر أمنية، مثل التصيّد الاحتيالي بالنقر، إذا كان بإمكان A2 الوصول إلى مساحة تخزين غير مُقسَّمة تلقائيًا.
لحلّ هذه المشكلة، يتضمّن Chrome "وحدة بيانات سلف" إضافية كجزء من مفتاح قسم التخزين، ويتم ضبطها إذا كان أي مستند بين السياق الحالي والسياق من المستوى الأعلى على مستوى الموقع الإلكتروني إلى السياق الحالي. في هذه الحالة، الموقع "ب" على مستوى الموقع الإلكتروني، لذا سيتم ضبط الإعداد على A2 وسيتم تقسيم مساحة التخزين من A1.
عندما لا يتضمّن المسار سياقًا على مستوى مواقع إلكترونية مختلفة، لا يتم تقسيم مساحة التخزين. على سبيل المثال، لن يتم تقسيم الموقع الإلكتروني A1 الذي يحتوي على إطار iframe للموقع الإلكتروني A2 الذي يحتوي على إطار iframe للموقع الإلكتروني A3 لأنّ كل المواقع الإلكترونية موجودة على الموقع الإلكتروني نفسه.
بالنسبة إلى المواقع الإلكترونية التي تحتاج إلى إذن وصول غير مقسَّم على مستوى إطارات iframe المتسلسلة، يجري Chrome تجربة توسيع نطاق Storage Access API لتفعيل حالة الاستخدام هذه. بما أنّ واجهة برمجة التطبيقات Storage Access API تتطلّب من الموقع الإلكتروني المُدرَج في إطار أن يستدعي واجهة برمجة التطبيقات صراحةً، فإنّ ذلك يقلل من خطر خدعة النقر.
واجهات برمجة التطبيقات المعدَّلة
يمكن تقسيم واجهات برمجة التطبيقات المتأثّرة بالقسمة إلى المجموعات التالية:
- واجهات برمجة تطبيقات مساحة التخزين
- واجهات برمجة تطبيقات التواصل
- Storage Worker API
- واجهات برمجة تطبيقات الإضافات
واجهات برمجة تطبيقات مساحة التخزين
- نظام الحصص
- يُستخدَم نظام الحصص لتحديد مقدار مساحة القرص التي يتم تخصيصها للتخزين. يدير نظام الحصة كل قسم كمجموعة منفصلة لتحديد المساحة المسموح بها ووقت إخلائها.
- يعرض
navigator.storage.estimate()
معلومات عن القسم. سيتم إيقاف واجهات برمجة التطبيقات المخصّصة لمتصفّح Chrome فقط، مثلwindow.webkitStorageInfo
وnavigator.webkitTemporaryStorage
.
يستخدم كلّ من - IndexedDB ومساحة التخزين المؤقت نظام الحصة المقسّمة الجديد.
- Web Storage API
- توفّر Web Storage API آليات يمكن للمتصفّحات من خلالها تخزين أزواج المفاتيح/القيم. هناك آليتان: مساحة التخزين المحلية و مساحة تخزين الجلسة. ولا يتم حاليًا إدارتها من خلال الحصة، ولكن لا يزال يتم تقسيمها.
- نظام الملفات الخاص في Origin
- تسمح File System Access API للموقع الإلكتروني بقراءة أو حفظ التغييرات مباشرةً في الملفات والمجلدات على الجهاز بعد أن يمنح المستخدم الإذن بالوصول. يسمح نظام "الملفات الخاصة للمصدر" للمصدر بتخزين محتوى خاص على القرص يمكن للمستخدم الوصول إليه بسهولة، ويكون مقسّمًا.
- Storage Bucket API
- يتم تطوير Storage Bucket API لـ Storage Standard الذي يدمج مختلف واجهات برمجة تطبيقات التخزين، مثل IndexedDB وlocalStorage، باستخدام مفهوم جديد يُعرف باسم الحِزم. يتم تقسيم البيانات المخزّنة في الحِزم والبيانات الوصفية المرتبطة بالحِزم.
- عنوان Clear-Site-Data
- إنّ تضمين عنوان
Clear-Site-Data
في الاستجابة يسمح للخدمة بطلب محو البيانات المخزّنة في متصفّح المستخدم. يمكن محو ذاكرة التخزين المؤقت وملفات تعريف الارتباط ومساحة التخزين في DOM. يؤدي استخدام العنوان فقط إلى تنظيف مساحة التخزين ضمن قسم واحد.
- متجر عنوان URL للبيانات غير القابلة للتغيير
- الكائن الثنائي الكبير (blob) هو عنصر يحتوي على بيانات أولية ليتمّت معالجتها، ويمكن إنشاء عنوان URL للكائن الثنائي الكبير (blob) للوصول إلى المورد. لا يتم تقسيم مساحات تخزين عناوين URL الخاصة بكائنات ثنائية كبيرة (BLOB). لدعم حالة استخدام للتنقّل في سياق من المستوى الأعلى إلى أي عنوان URL لملف برمجي (مناقشة)، قد يتم تقسيم مخزن عناوين URL لملف برمجي من خلال مجموعة الوكلاء بدلاً من الموقع الإلكتروني من المستوى الأعلى. لا تتوفّر هذه الميزة للاختبار بعد، وقد تتغيّر آلية التقسيم في المستقبل.
واجهات برمجة تطبيقات التواصل
بالإضافة إلى واجهات برمجة التطبيقات للتخزين، يتم أيضًا تقسيم واجهات برمجة التطبيقات للتواصل التي تسمح لسياق واحد بالتواصل على مستوى حدود المصدر. تؤثر التغييرات بشكل أساسي في واجهات برمجة التطبيقات التي تسمح باكتشاف سياقات أخرى من خلال البث أو الربط بنقطة الاتصال ذات المصدر نفسه.
بالنسبة إلى واجهات برمجة التطبيقات التالية للتواصل، لم يعُد بإمكان إطار iframe التابع لجهة خارجية التواصل مع سياق المصدر نفسه:
- قناة البث
- تتيح واجهة برمجة التطبيقات Broadcast Channel API التواصل بين سياقات التصفّح (نوافذ أو علامات تبويب أو إطارات iframe) والموظفين من المصدر نفسه.
- لا يُقترح تغيير
postMessage()
إطار iframe على مستوى الموقع الإلكتروني عندما تكون العلاقة بين السياقات محدّدة بوضوح.
- SharedWorker
- توفّر واجهة برمجة التطبيقات SharedWorker Worker وحدة يمكن الوصول إليها في سياقات التصفّح ذات المصدر نفسه.
- قفل الويب
- تسمح واجهة برمجة التطبيقات Web Locks API للرمز البرمجي الذي يتم تشغيله في علامة تبويب واحدة أو عملية واحدة من النطاق نفسه بالحصول على قفل لمورد مشترَك أثناء تنفيذ بعض المهام.
واجهة برمجة التطبيقات Service Worker API
توفّر Service Worker API واجهة لتنفيذ المهام في الخلفية. تنشئ المواقع الإلكترونية تسجيلات دائمة تُنشئ سياق عامل جديد للردّ على الأحداث، ويستطيع هذا العامل التواصل مع أي سياق من المصدر نفسه. بالإضافة إلى ذلك، يمكن أن تغيّر واجهة برمجة التطبيقات Service Worker API توقيت طلبات التنقّل، ما قد يؤدي إلى احتمال تسرُّب المعلومات على مستوى المواقع الإلكترونية، مثل التنقّل في السجلّ.
لذلك، يتم تقسيم مشغّلي الخدمات المسجّلين من سياق تابع لجهة خارجية.
واجهات برمجة التطبيقات الخاصة بالإضافات
الإضافات هي برامج تسمح للمستخدمين بتعديل تجربة التصفّح.
يمكن تضمين صفحات الإضافات (الصفحات التي تتضمّن مخطّط chrome-extension://
) في
المواقع الإلكترونية على الإنترنت، وفي هذه الحالات، سيظل بإمكانها الوصول إلى
القسم من المستوى الأعلى.
يمكن أيضًا لهذه الصفحات تضمين مواقع إلكترونية أخرى، وفي هذه الحالة ستتمكّن هذه المواقع من
الوصول إلى القسم من المستوى الأعلى طالما أنّ الإضافة لديها
أذونات المضيف
لهذا الموقع الإلكتروني.
لمزيد من المعلومات، يُرجى الاطّلاع على مستندات الإضافات.
عرض توضيحي: اختبار تقسيم مساحة التخزين
الموقع الإلكتروني التجريبي: https://storage-partitioning-demo-site-a.glitch.me/

يستخدم العرض التجريبي موقعَين إلكترونيَّين: الموقع "أ" والموقع "ب".
- عند زيارة الموقع الإلكتروني "أ" في سياق المستوى الأعلى، يتم ضبط البيانات باستخدام طرق تخزين مختلفة.
- يضمّن الموقع الإلكتروني "ب" صفحة من الموقع الإلكتروني "أ"، ويحاول هذا التضمين قراءة خيارات التخزين التي تم ضبطها سابقًا.
- عندما يكون الموقع الإلكتروني "أ" مضمّنًا في الموقع الإلكتروني "ب"، لا يمكنه الوصول إلى هذه البيانات عند تقسيم مساحة التخزين، وبالتالي يتعذّر إجراء عمليات القراءة.
- يستخدم العرض الترويجي نجاح أو تعذُّر كل عملية قراءة لعرض ما إذا كانت البيانات مقسّمة.
في الوقت الحالي، يمكنك إيقاف تقسيم مساحة التخزين في Chrome باستخدام --disable-features=ThirdPartyStoragePartitioning
مفتاح سطر الأوامر.
يمكنك أيضًا اختبار متصفّحات أخرى بالطريقة نفسها لمعرفة حالة تقسيمها.
التفاعل مع الملاحظات ومشاركتها
- GitHub: يمكنك قراءة الاقتراح الأصلي، وطرح الأسئلة والمشاركة في المناقشة.
- دعم المطوّرين: يمكنك طرح الأسئلة والانضمام إلى المناقشات على مستودع دعم المطوّرين في "مبادرة حماية الخصوصية".
- إرسال تقارير عن الأخطاء: يمكنك إرسال تقرير عن خطأ في نظام تتبُّع Chromium إذا كنت تعتقد أنّ هناك مشكلة لا تعمل على النحو المتوقّع.