قيمة allow-same-site-none-cookies الجديدة في وضع الحماية من الإصدار 135 من Chrome

Natalia Markoborodova
Natalia Markoborodova

اعتبارًا من الإصدار 135 من Chrome، يمكنك استخدام القيمة الجديدة sandbox: allow-same-site-none-cookies. عند تحديد هذه السياسة وعدم توفّر ملفات تعريف الارتباط التابعة لجهات خارجية، لن يرسل المتصفّح سوى ملفات تعريف الارتباط SameSite=None في طلبات HTTP المنشأة من إطارات iframe في وضع الحماية للطرف الأول.

ما هو إطار iframe المحمي؟

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

استخدِم سمة sandbox لتحديد الميزات التي يجب أن تتوفّر في إطار iframe المحمي. على سبيل المثال:

 <iframe sandbox="allow-scripts" src="example-sandboxed-frame.html"/>

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

ما هو سبب الحاجة إلى هذه السياسة الجديدة؟

قبل طرح allow-same-site-none-cookies، كان بإمكانك ضبط سيناريوهَين لملفات تعريف الارتباط في إطار iframe محمي:

  • في حال عدم توفّر الرمز المميّز allow-same-origin في سمة sandbox، يتم تسلسل مصدر إطار iframe على النحو التالي: null، ما يجعل جميع الطلبات الواردة من الصفحة المُعلّقة في مساحة اختبار متعدّدة المواقع الإلكترونية. في هذه الحالة، لن يتم تضمين سوى ملفات تعريف الارتباط التي تحتوي على SameSite=None في الطلبات.
  • باستخدام الرمز المميّز allow-same-origin في سمة sandbox، تتم معالجة الطلبات على أنّها ناتجة من المصدر الحقيقي لإطار iframe، ما يسمح بإرسال ملفات تعريف الارتباط التي تحتوي على أي قيمة SameSite.

في حال حظر ملفات تعريف الارتباط التابعة لجهات خارجية، لا يمكن لإطار iframe في وضع الحماية الذي لا يتضمّن allow-same-origin إرسال أي ملفات تعريف ارتباط ما لم يتم تفعيل allow-same-site-none-cookies.

سيظل بإمكان إطار iframe الذي يتضمّن allow-same-origin تضمين ملفات تعريف الارتباط في requests على الموقع الإلكتروني نفسه، حتى في حال حظر ملفات تعريف الارتباط التابعة لجهات خارجية. ومع ذلك، سيتم تعريض علبة ملفّات تعريف الارتباط بالكامل للموقع الإلكتروني لنشاط على الويب يُحتمل أن يكون ضارًا.

باستخدام allow-same-site-none-cookies، يمكن لإطار iframe إرسال ملفات تعريف ارتباط SameSite=None في طلبات HTTP، بينما لن يتم تضمين ملفات تعريف ارتباط SameSite=Strict و SameSite=Lax التي قد تكون حسّاسة.

مثال عملي

لنفترض أنّ هناك موقعًا إلكترونيًا، practice-coding.example، يسمح للمستخدمين بإنشاء مشاريع ترميز مخصّصة وتشغيلها وتضمين رموز المستخدمين الآخرين. لاستخدام الخدمة، يجب أن تسجيل دخول المستخدمين، ما يؤدي إلى ضبط ملف تعريف ارتباط جلسة SameSite=Strict.

أنشأ مستخدم آخر مشروعًا بعنوان practice-coding.example/cookie-theft يمكن لمستخدمين آخرين تضمينه كإطار iframe في مشاريعهم بدون علمهم. إذا تم عرض ملفات تعريف ارتباط SameSite=Strict وSameSite=Lax في إطار العمل practice-coding.example/cookie-theft، يمكن للمستخدم الضار سرقة ملفات تعريف ارتباط جلسات المستخدمين الآخرين.

في هذا السيناريو، قد يريد مالك الموقع الإلكتروني حظر الوصول إلى ملفات تعريف الارتباط التي يُحتمل أن تكون حساسة. ومع ذلك، قد يرغبون في السماح بملفات تعريف الارتباط SameSite=None داخل إطارات iframe في وضع الحماية. على سبيل المثال، practice-coding.example/coding-interview قد يتطلّب إطار iframe في وضع الحماية القصوى SameSite=None ملفات تعريف الارتباط للسماح للمشاركين بمراجعة الرمز البرمجي. يمنع allow-same-site-none-cookies عرض علبة ملفّات تعريف الارتباط بالكامل مع السماح بشكل انتقائي بملفات تعريف الارتباط SameSite=None اللازمة.

كيف يمكنني السماح بSameSite=None فقط داخل الإطارات المحمية للطرف الأول؟

لتفعيل ملفات تعريف الارتباط SameSite=None في الطلبات الواردة من صفحات الطرف الأول في وضع الحماية، حدِّد الرمز المميّز allow-same-site-none-cookies في علامة iframe. على سبيل المثال:

 <iframe sandbox="allow-same-site-none-cookies" src="example-sandboxed-page.html"/>

يمكنك أيضًا ضبط سياسة allow-same-site-none-cookies باستخدام عنوان HTTP يتضمّن Content-Security-Policy:

Content-Security-Policy: sandbox allow-same-site-none-cookies;

يمكنك تجربة ذلك بنفسك باستخدام الإصدار التجريبي.

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

يمكنك الإبلاغ عن مشكلة لمشاركة الملاحظات أو الإبلاغ عن المشاكل، أو الانضمام إلى المناقشة على GitHub.