من العادل أن نقول إن SharedArrayBuffer
قد توصلت إلى
الويب، ولكن الأمور تستقر. في ما يلي ما تحتاج إلى معرفته:
باختصار
- تطبيق
SharedArrayBuffer
متاح حاليًا في الإصدار 79 من Firefox أو الإصدارات الأحدث، وسيتوفّر على أجهزة Android. الإصدار 88 من Chrome. ومع ذلك، فإنه متاح فقط للصفحات المعزولة من مصادر متعددة. - يتوفّر "
SharedArrayBuffer
" حاليًا في Chrome لأجهزة الكمبيوتر المكتبي، ولكن من Chrome. 92، سيقتصر على الصفحات المعزولة من مصادر متعددة. إذا كنت لا تعتقد أنك يمكنك إجراء هذا التغيير في الوقت المناسب، يمكنك التسجيل في فترة تجريبية للمصدر للاحتفاظ بالسلوك الحالي حتى Chrome على الأقل 113. - إذا كنت تريد تفعيل حظر الوصول من نطاقات أخرى لمواصلة استخدام
تعمل ميزة "
SharedArrayBuffer
" على تقييم تأثير هذا الإجراء في مصادر أخرى من مصادر متعددة. على موقعك الإلكتروني، مثل مواضع الإعلانات تحقّق مما إذا كانSharedArrayBuffer
يتم استخدامها بواسطة أي من موارد الجهات الخارجية لفهم التأثير التوجيه.
نظرة عامة على حظر الوصول من نطاقات أخرى
يمكنك عزل المحتوى المتعدد المصادر من خلال عرض الصفحة التي تحتوي على العناوين:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
بعد إجراء ذلك، لن تتمكّن صفحتك من تحميل محتوى من مصادر متعددة ما لم يتم إجراء ذلك
إذا كان المورد يسمح بذلك صراحةً عبر Cross-Origin-Resource-Policy
رأس الصفحة أو عناوين CORS
(Access-Control-Allow-*
وما إلى ذلك).
هناك أيضًا واجهة برمجة تطبيقات لإعداد التقارير، لذلك
يمكنه جمع بيانات عن الطلبات التي فشلت نتيجة
Cross-Origin-Embedder-Policy
وCross-Origin-Opener-Policy
إذا كنت لا تعتقد أنه يمكنك إجراء هذه التغييرات في الوقت المناسب عند استخدام الإصدار 92 من Chrome، يمكنك التسجيل في مرحلة التجربة والتقييم للاحتفاظ بسطح المكتب الحالي من Chrome حتى إصدار 113 من Chrome على الأقل.
يمكنك مراجعة قسم قراءة إضافية في أسفل هذه الصفحة للاطّلاع على مزيد من الإرشادات والمعلومات حول حظر الوصول من نطاقات أخرى.
كيف وصلنا إلى هذه النقطة؟
وصل SharedArrayBuffer
إلى Chrome 60 (أي في تموز (يوليو) 2017، لمن
التفكير في الوقت بالتواريخ بدلاً من إصدارات Chrome)، وكل شيء كان رائعًا.
لمدة 6 أشهر.
في كانون الثاني (يناير) 2018، تم الكشف عن ثغرة أمنية في بعض وحدات المعالجة المركزية الشائعة. يمكنك الاطّلاع على إشعار للحصول على التفاصيل الكاملة، ولكنه يعني أن الرمز البرمجي يمكنه استخدام درجات دقة عالية الموقتات لقراءة الذاكرة التي لا ينبغي لها الوصول إليها.
كانت هذه مشكلة بالنسبة لنا موردي المتصفحات، إذ نريد السماح للمواقع بتنفيذها المستخدم في شكل JavaScript وWASM، ولكن يتحكم بشكل صارم في الذاكرة المستخدم الوصول إليه. إذا وصلت إلى موقعي الإلكتروني، فلن أتمكّن من قراءة وأي شيء من موقع الخدمات المصرفية عبر الإنترنت الذي فتحته أيضًا. في الواقع، لا ينبغي لي أنك قد فتحت موقعك الإلكتروني المصرفي على الإنترنت. هذه أساسيات أمان الويب.
وللتخفيف من ذلك، قمنا بتقليل دقة المؤقتات عالية الدقة مثل
باسم performance.now()
. ومع ذلك، يمكنك إنشاء موقّت عالي الدقة باستخدام
SharedArrayBuffer
عن طريق تعديل الذاكرة في حلقة ضيقة لدى العامل والقراءة
مرة أخرى في سلسلة محادثات أخرى. لا يمكن التخفيف من هذا بشكل فعال دون
كان له تأثير كبير على رمز برمجي حسن النية، لذا تم إيقاف SharedArrayBuffer
.
تمامًا.
من التخفيف العام التأكد من عدم احتواء عملية نظام صفحة الويب على البيانات الحساسة من مكان آخر. استثمر Chrome في عمليات متعددة البنية الأساسية منذ البداية (هل تتذكر القصة المصوّرة؟)، ولكن كانت هناك الحالات التي قد تنتهي فيها البيانات من مواقع متعددة في نفس العملية:
<iframe src="https://your-bank.example/balance.json"></iframe>
<script src="https://your-bank.example/balance.json"></script>
<link rel="stylesheet" href="https://your-bank.example/balance.json" />
<img src="https://your-bank.example/balance.json" />
<video src="https://your-bank.example/balance.json"></video>
<!-- …and more… -->
تحتوي واجهات برمجة التطبيقات هذه على "قديم" الذي يسمح بنشر محتوى من مصادر أخرى استخدامه بدون موافقة من المصدر الآخر. يتم إجراء هذه الطلبات باستخدام ملفات تعريف الارتباط من المصدر الآخر، بحيث تكون "تسجيل الدخول" كاملاً طلبك. في الوقت الحاضر، تتطلّب واجهات برمجة التطبيقات المصدر الآخر الموافقة باستخدام CORS.
لقد تعاملنا مع واجهات برمجة التطبيقات القديمة هذه من خلال منع المحتوى من الدخول إلى صفحة الويب إذا بدت "غير صحيحة"، وتم تسميتها باسم حظر القراءة من مصادر متعددة. لذلك، في الحالات المذكورة أعلاه، لن نسمح لـ JSON بالدخول إلى العملية، لأنها ليست تنسيق صالح لأيٍّ من واجهات برمجة التطبيقات هذه. وهذا يعني باستثناء إطارات iframe. بالنسبة لإطارات iframe، وتضع المحتوى في عملية مختلفة.
بعد تنفيذ إجراءات التخفيف هذه، أعدنا طرح SharedArrayBuffer
في Chrome.
68 (يوليو 2018)، ولكن على أجهزة الكمبيوتر المكتبي فقط تعني متطلبات العملية الإضافية أننا
لا يمكنهم فعل الشيء نفسه على الأجهزة المحمولة. كما لاحظنا أن حل Chrome
غير مكتملة، لأننا كنا نحظر فقط الإعلانات "غير الصحيحة" بتنسيقات البيانات، في حين أنها
من الممكن (على الرغم من أن ذلك غير مألوف) أن تتوفر صور CSS/JS/صور صالحة في عناوين URL يمكن تخمينها
تحتوي على بيانات خاصة.
اجتمع الأشخاص معًا للتوصل إلى نموذج أكثر اكتمالاً عبر المتصفحات
الحل. كان الحل هو إعطاء الصفحات طريقة ليقولوا لي: "بموجب هذه الرسالة، أتخلى عن
إدخال محتوى من مصادر أخرى إلى هذه العملية بدون موافقتهم".
يتم تنفيذ هذا البيان من خلال عناوين COOP وCOEP.
مع الصفحة. ويفرض المتصفح ذلك، وفي المقابل تكتسب الصفحة
إمكانية الوصول إلى SharedArrayBuffer
وواجهات برمجة التطبيقات الأخرى بإمكانيات مشابهة. مصادر أخرى
تفعيل ميزة تضمين المحتوى من خلال
Cross-Origin-Resource-Policy
أو CORS.
كانت Firefox أول من يشحن إلى SharedArrayBuffer
بهذه القيود، في
الإصدار 79 (تموز/يوليو 2020).
بعد ذلك، كتبت هذه المقالة في كانون الثاني (يناير) 2021 وقرأتها. مرحبًا،
وهذا هو المكان الذي نحن فيه الآن. Chrome 88 يعيد SharedArrayBuffer
إلى
Android للصفحات التي يتم عزلها من مصادر متعددة، في حين يوفّر Chrome 92 الأمر نفسه
متطلبات أجهزة الكمبيوتر المكتبي، سواء من أجل الاتساق أو تحقيق إجمالي الأرباح من مصادر متعددة
والعزلة.
تأجيل تغيير متصفّح Chrome المخصّص لأجهزة الكمبيوتر
هذا استثناء مؤقت في شكل "مرحلة تجريبية للمصدر". يمنح الأشخاص
مزيد من الوقت لتنفيذ الصفحات التي تحظر الوصول من نطاقات آخرى. إنه يمكّن
SharedArrayBuffer
بدون طلب عزل الصفحة من مصادر متعددة. تشير رسالة الأشكال البيانية
تنتهي صلاحية الاستثناء في الإصدار 113 من Chrome، وينطبق الاستثناء على أجهزة الكمبيوتر المكتبي فقط
Chrome.
- اطلب رمزًا مميّزًا من المصدر.
- أضِف الرمز المميّز إلى صفحاتك. هناك طريقتان لإجراء ذلك:
- أضِف علامة
<meta>
لبرامجorigin-trial
في رأس كل صفحة. على سبيل المثال: قد يظهر العنصر على النحو التالي:
.<meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">
- إذا كان بإمكانك ضبط خادمك، يمكنك أيضًا إضافة الرمز المميّز
باستخدام عنوان HTTP يتضمّن العنصر
Origin-Trial
. يجب أن يكون عنوان الاستجابة الناتج يشبه ما يلي:
Origin-Trial: TOKEN_GOES_HERE
- أضِف علامة
محتوى إضافي للقراءة
- دليل تفعيل حظر الوصول من نطاقات أخرى
- كيفية عزل صفحاتك من مصادر متعددة
- سبب أهمية حظر الوصول من نطاقات أخرى
صورة بانر من إنشاء دانيال Gregoire على قناة Unspark