لتعزيز خصوصية المستخدمين ومكافحة التتبُّع على مستوى المواقع الإلكترونية من خلال القنوات الجانبية، يعزل Chrome الآن معظم واجهات برمجة التطبيقات الخاصة بمساحة التخزين والاتصال في سياقات تابعة لجهات خارجية من خلال عملية تُعرف باسم تقسيم مساحة التخزين.
حالة التنفيذ
تم تفعيل الميزة لجميع المستخدمين على الإصدار 115 من Chrome والإصدارات الأحدث. تتوفّر أيضًا جهود مماثلة لتقسيم مساحة التخزين أو يتم التخطيط لها في متصفّحات رئيسية أخرى، مثل Firefox وSafari. يمكنك الاطّلاع على اقتراح تقسيم مساحة التخزين على GitHub والمشاركة في مناقشات إضافية.
ما هو تقسيم مساحة التخزين؟
لمنع أنواع معيّنة من تتبُّع إجراءات المستخدم على مواقع إلكترونية متعددة على جميع القنوات، يقسِّم Chrome مساحة التخزين وواجهات برمجة التطبيقات للمراسلات في سياقات تابعة لجهات خارجية.
بدون تقسيم مساحة التخزين، يمكن لموقع إلكتروني دمج البيانات من مواقع إلكترونية مختلفة لتتبُّع المستخدم على الويب. ويسمح أيضًا للموقع الإلكتروني المضمّن باستنتاج حالات معيّنة حول المستخدم في الموقع الإلكتروني ذي المستوى الأعلى باستخدام تقنيات القنوات الجانبية، مثل هجمات التوقيت وXS-Leaks وCOSI.
في السابق، كان يتم تحديد مفتاح التخزين حسب المصدر فقط. وهذا يعني أنّه في حال تم تضمين إطار iframe من example.com على a.com وb.com، قد يتمكّن من التعرّف على عادات التصفّح لديك على هذين الموقعَين الإلكترونيَين من خلال تخزين معرّف واسترداده بنجاح من مساحة التخزين. عند تفعيل تقسيم مساحة التخزين الخارجية،
تتوفّر مساحة التخزين الخاصة بـ example.com في قسمَين مختلفَين، أحدهما خاص بـ a.com
والآخر خاص بـ b.com.
بشكل عام، يعني التقسيم أنّه لم يعُد بإمكان جميع السياقات التي تشترك في المصدر نفسه الوصول إلى البيانات التي تكتبها واجهات برمجة التطبيقات الخاصة بمساحة التخزين، مثل Local Storage وIndexedDB، ضِمن إطار iframe. بدلاً من ذلك، يتم الآن عزل هذه البيانات ولا تتوفّر إلا للسياقات التي تتشارك المصدر نفسه والموقع الإلكتروني نفسه ذي المستوى الأعلى.
تقسيم مساحة التخزين على إطارات iframe المتسلسلة
تزداد تعقيد عملية تقسيم مساحة التخزين بشكلٍ كبير عند تضمين إطارات iframe، لا سيما عندما يظهر المصدر نفسه عدة مرات في السلسلة.
على سبيل المثال، تحتوي A1 على إطار iframe لـ B الذي يحتوي على إطار iframe لـ A2، وكلاهما A1 وA2 على الموقع الإلكتروني نفسه. إذا كان التقسيم يأخذ في الاعتبار الموقع الإلكتروني من المستوى الأعلى ومصدر الإطار الحالي فقط، قد يتم التعامل مع الإطار A2 بشكل خاطئ على أنّه "تابع للطرف الأول" لأنّه يتشارك موقعًا إلكترونيًا مع المستوى الأعلى (A1)، على الرغم من وجود الإطار B المتضمّن في موقع إلكتروني مختلف بينهما. وقد يؤدي ذلك إلى تعريض A2 لمخاطر أمنية، مثل النقر المخادع، إذا كان بإمكان A2 الوصول إلى مساحة تخزين غير مقسَّمة تلقائيًا.
لحلّ هذه المشكلة، يضيف Chrome "بتًا رئيسيًا" إلى مفتاح قسم التخزين. يتم ضبط هذا الجزء إذا كان أي مستند بين الإطار الحالي (iframe) والموقع الإلكتروني على المستوى الأعلى من مصدر مختلف (من عدة مواقع إلكترونية). في هذه الحالة، يكون الموقع الإلكتروني "ب" موقعًا إلكترونيًا على مستوى مواقع متعددة، لذا سيتم ضبط البت لـ A2 وسيتم تقسيم مساحة التخزين عن A1.
عندما تتألف سلسلة إطارات iframe من سياقات الموقع الإلكتروني نفسه فقط (على سبيل المثال، يحتوي الموقع الإلكتروني A1 على A2، الذي يحتوي بدوره على A3)، لن تقسم بتة العنصر الأصل مساحة التخزين الخاصة بها بشكل أكبر. في مثل هذه الحالات، تظل مساحة التخزين مشترَكة، ويتم تحديدها من خلال المصدر المشترك والموقع الإلكتروني ذي المستوى الأعلى.
بالنسبة إلى المواقع الإلكترونية التي تحتاج إلى إذن وصول غير مقسَّم إلى إطارات iframe متسلسلة، يجري Chrome تجربة لتوسيع نطاق واجهة برمجة التطبيقات Storage Access API من أجل إتاحة حالة الاستخدام هذه. بما أنّ واجهة برمجة التطبيقات Storage Access API تتطلّب أن يستدعي الموقع الإلكتروني المعروض في إطار واجهة برمجة التطبيقات بشكلٍ صريح، يحدّ ذلك من خطر النقر المخادع.
تغييرات في واجهة برمجة التطبيقات بسبب التقسيم
يمكن تقسيم واجهات برمجة التطبيقات المتأثرة بالتقسيم إلى المجموعات التالية:
- واجهات برمجة التطبيقات المتعلّقة بمساحة التخزين
- واجهات برمجة تطبيقات التواصل
- Service Worker 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 API
- يتم تطوير Storage Bucket API من أجل Storage Standard الذي يدمج واجهات برمجة تطبيقات مختلفة للتخزين، مثل IndexedDB وlocalStorage، وذلك باستخدام مفهوم جديد يُعرف باسم الحِزم. يتم تقسيم البيانات المخزَّنة في الحِزم والبيانات الوصفية المرتبطة بالحِزم.
- عنوان Clear-Site-Data
- يتيح تضمين العنوان
Clear-Site-Dataفي الرد للخادم أن يطلب محو البيانات المخزّنة في متصفّح المستخدم. يمكن محو ذاكرة التخزين المؤقت وملفات تعريف الارتباط ومساحة تخزين DOM. يؤدي استخدام العنوان إلى محو مساحة التخزين داخل قسم واحد فقط.
- متجر عناوين URL الخاصة بالكائنات الثنائية الكبيرة (BLOB)
- يوفّر عنوان URL الخاص بكائنات ثنائية كبيرة (BLOB) إمكانية الوصول إلى blob،
وهو كائن يحتوي على بيانات أولية. بدون تقسيم مساحة التخزين، يمكن استخدام عنوان URL الخاص بكائن ثنائي كبير الحجم تم إنشاؤه في إطار iframe تابع لجهة خارجية على أحد المواقع الإلكترونية في إطار iframe من المصدر نفسه مضمّن في موقع إلكتروني آخر. على سبيل المثال، إذا تم تضمين إطارات
example.comiframe في كل منa.comوb.com، يمكن تمرير عنوان URL الخاص بكائن ثنائي كبير الحجم تم إنشاؤه في إطار iframe المضمّن فيa.comإلى إطار iframe المضمّن فيb.comواستخدامه بدون أي قيود. اعتبارًا من الإصدار 137 من Chrome (الذي سيتم إطلاقه في 27 مايو 2025)، سيتم تقسيم عناوين URL الخاصة بكائنات Blob لجميع الاستخدامات باستثناء عمليات التنقّل على المستوى الأعلى. تشمل الحالات التي سيتم حظرها الآن استخدام عناوين URL الخاصة بكائنات ثنائية كبيرة الحجم على مستوى الأقسام معfetch()أو كقيمة السمةsrcلعناصر HTML المختلفة. لن يتم حظر عمليات التنقّل على المستوى الأعلى، مثل طلبwindow.open()أو النقر على رابط يتضمّنtarget='_blank'، إلى عناوين URL الخاصة بالكائنات الثنائية الكبيرة (BLOB) إذا كانت من عدة أقسام، ولكن سيتم فرضnoopenerإذا كان الموقع الإلكتروني لعنوان URL الخاص بالكائنات الثنائية الكبيرة (BLOB) من عدة مواقع إلكترونية بالإضافة إلى الموقع الإلكتروني من المستوى الأعلى للصفحة التي بدأت عملية التنقّل. عند فرضnoopener، سيتم منع المستند الذي يبدأ عملية التنقّل من الحصول على معرّف نافذة لمستند عنوان URL الخاص بكائن ثنائي كبير (BLOB) الذي تم فتحه. في المثال السابق، سيمنع التقسيم إطار iframe علىb.comمن جلب محتوى عنوان URL الخاص بالكائن الثنائي الكبير، ولكن سيظل بإمكانهwindow.open().
واجهات برمجة التطبيقات الخاصة بالتواصل
بالإضافة إلى واجهات برمجة التطبيقات الخاصة بمساحة التخزين، يتم أيضًا تقسيم واجهات برمجة التطبيقات الخاصة بالمراسلات التي تسمح لأحد السياقات بالتواصل عبر حدود المصدر. تؤثّر التغييرات بشكل أساسي في واجهات برمجة التطبيقات التي تتيح اكتشاف سياقات أخرى باستخدام البث أو نقطة الالتقاء من المصدر نفسه.
بسبب التقسيم، تمنع واجهات برمجة التطبيقات التالية للمراسلات إطارات iframe التابعة لجهات خارجية من تبادل البيانات مع سياقاتها من المصدر نفسه:
- قناة البث
- تتيح واجهة برمجة التطبيقات Broadcast Channel API التواصل بين سياقات التصفّح (النوافذ أو علامات التبويب أو إطارات iframe) والعاملين من المصدر نفسه.
- لا يُقترَح تغيير سلوك إطار iframe
postMessage()على مستوى المواقع الإلكترونية، لأنّ العلاقة بين هذه السياقات محدّدة بوضوح.
- SharedWorker
- توفّر واجهة برمجة التطبيقات SharedWorker عاملاً يمكن الوصول إليه في سياقات التصفّح من المصدر نفسه.
- Web Locks
- تسمح Web Locks API للرمز البرمجي الذي يتم تنفيذه في علامة تبويب أو عامل في النطاق نفسه بالحصول على قفل لمورد مشترك أثناء تنفيذ بعض المهام.
Service Worker API
تسمح واجهة برمجة التطبيقات Service Worker API للمواقع الإلكترونية بتنفيذ مهام في الخلفية. تسجّل المواقع الإلكترونية برامج معالجة الخدمات التي تنشئ سياقات جديدة لبرامج المعالجة من أجل الاستجابة للأحداث. في السابق، كان بإمكان هؤلاء العاملين التواصل مع أي سياق من المصدر نفسه. ومع ذلك، بما أنّ عاملي الخدمة يمكنهم تغيير توقيت طلبات التنقّل، فإنّهم يشكّلون خطرًا من حيث تسريب المعلومات على مستوى المواقع الإلكترونية، مثل التجسّس على سجلّ التصفّح.
لهذا السبب، يتم الآن تقسيم مشغّلي الخدمات المسجَّلين من سياق تابع لجهة خارجية.
واجهات برمجة التطبيقات للإضافات
الإضافات هي برامج تتيح للمستخدمين تخصيص تجربة التصفّح.
يمكن تضمين صفحات الإضافات (الصفحات التي تستخدم المخطط chrome-extension://) في المواقع الإلكترونية على الويب. في هذا السيناريو، ستظل صفحات الإضافة قادرة على الوصول إلى قسمها الرئيسي.
يمكن للإضافات أيضًا تضمين مواقع إلكترونية أخرى، وعندما تفعل ذلك، ستتمكّن هذه المواقع الإلكترونية المضمَّنة من الوصول إلى القسم الأعلى مستوى، شرط أن يكون لدى الإضافة أذونات المضيف لهذه المواقع.
لمزيد من المعلومات، راجِع مستندات الإضافة.
عرض توضيحي: اختبار تقسيم مساحة التخزين
الموقع الإلكتروني التجريبي: https://storage-partitioning-demo-site-a.glitch.me/
يستخدم العرض التوضيحي موقعَين إلكترونيَين: الموقع الإلكتروني (أ) والموقع الإلكتروني (ب).
- عندما تزور الموقع الإلكتروني (أ) في سياق المستوى الأعلى، يتم ضبط البيانات باستخدام طرق تخزين مختلفة.
- يضمّن الموقع الإلكتروني (ب) صفحة من الموقع الإلكتروني (أ)، وتحاول عملية التضمين هذه قراءة خيارات التخزين التي تم ضبطها سابقًا.
- عندما يتم تضمين الموقع الإلكتروني (أ) في الموقع الإلكتروني (ب)، لا يمكنه الوصول إلى هذه البيانات عند تقسيم مساحة التخزين، وبالتالي يتعذّر إجراء عمليات القراءة.
- يستخدم العرض التوضيحي نجاح أو تعذّر كل عملية قراءة لتوضيح ما إذا كانت البيانات مقسّمة.
في الوقت الحالي، يمكنك إيقاف تقسيم مساحة التخزين في Chrome باستخدام --disable-features=ThirdPartyStoragePartitioning خيار سطر الأوامر. ملاحظة: تم تصميم خيار سطر الأوامر هذا لأغراض التطوير والاختبار، وقد تتم إزالته أو تغييره في إصدارات Chrome المستقبلية.
يمكنك أيضًا اختبار متصفّحات أخرى بالطريقة نفسها لمعرفة حالة التقسيم.
طلب وقت إضافي لنقل البيانات
تم الآن تمديد فترة استخدام الإصدار التجريبي من DisableThirdPartyStoragePartitioning3 للمواقع الإلكترونية التي تحتاج إلى وقت إضافي لنقل التبعيات. تقدّم هذه التجربة آلية مؤقتة تتيح للمواقع الإلكترونية ذات المستوى الأعلى الموافقة على استخدام مساحة التخزين غير المقسّمة وبرامج الخدمة وواجهات برمجة التطبيقات الخاصة بالتواصل في سياقات الجهات الخارجية المضمّنة في صفحاتها.
يمكنك الانتقال إلى تجديد الفترة التجريبية لإيقاف ميزة "تقسيم مساحة التخزين" نهائيًا لمعرفة المزيد.
التفاعل مع الملاحظات ومشاركتها
- GitHub: يمكنك الاطّلاع على الاقتراح الأصلي وطرح الأسئلة والمشاركة في المناقشة.
- الإبلاغ عن الأخطاء: يمكنك الإبلاغ عن خطأ في أداة تتبُّع Chromium إذا كنت تعتقد أنّ هناك مشكلة.