وصفات حلوى SameSite

يغيّر Chrome Firefox Edge وغيرها من المتصفّحات السلوك التلقائي وفقًا لمقترح IETF ملفّات تعريف ارتباط أفضل تدريجيًا كي:

  • يتم التعامل مع ملفات تعريف الارتباط التي لا تحتوي على سمة SameSite على أنّها SameSite=Lax، ما يعني أنّ السلوك التلقائي هو حصر ملفات تعريف الارتباط في ملفّات تعريف الارتباط الخاصة بالطرف الأول فقط.
  • يجب أن تحدِّد ملفات تعريف الارتباط المخصّصة للاستخدام على عدة مواقع إلكترونية SameSite=None; Secure ل تفعيل إمكانية تضمينها في سياق تابع لجهة خارجية.

إذا لم يسبق لك إجراء ذلك، عليك تعديل سمات ملفات تعريف الارتباط التابعة لجهات خارجية لكي لا يتم حظرها في المستقبل.

توافق المتصفّح

  • Chrome: 51
  • الحافة: 16.
  • Firefox: 60
  • Safari: 13-

المصدر

حالات استخدام ملفات تعريف الارتباط على جميع المواقع الإلكترونية أو التابعة لجهات خارجية

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

المحتوى ضمن <iframe>

المحتوى من موقع إلكتروني مختلف معروض في <iframe> ضمن سياق تابع لجهة خارجية تشمل حالات الاستخدام العادية ما يلي:

  • المحتوى المضمَّن الذي تمت مشاركته من مواقع إلكترونية أخرى، مثل الفيديوهات والخرائط ونماذج الرموز البرمجية والمشاركات على وسائل التواصل الاجتماعي
  • التطبيقات المصغّرة من خدمات خارجية، مثل ميزات الدفعات والتقاويم والحجز
  • أدوات مثل الأزرار الاجتماعية أو خدمات مكافحة الاحتيال التي تجعل من الصعب وضوحها <iframes>.

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

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

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

الطلبات "غير الآمنة" على جميع المواقع الإلكترونية

قد يبدو لك أنّ كلمة "غير آمن" تشير إلى طلب خطير، ولكنّها تشير إلى أي طلب قد يكون مقصودًا لتغيير الحالة. على الويب، تكون هذه الطلبات في الأساس طلبات POST. يتم إرسال ملفات تعريف الارتباط المصنّفة على أنّها SameSite=Lax عند التنقّل الآمن على المستوى الأعلى، مثل النقر على رابط للانتقال إلى موقع إلكتروني مختلف. ومع ذلك، لا تتضمّن عمليات الإرسال مثل <form> إلى موقع إلكتروني مختلف باستخدام POST ملفات تعريف الارتباط.

مخطّط بياني لطلب ينتقل من صفحة إلى أخرى
إذا كان الطلب الوارد يستخدم طريقة "آمنة"، ترسل الصفحة ملفات تعريف الارتباط.

يتم استخدام هذا النمط للمواقع الإلكترونية التي يمكنها إعادة توجيه المستخدم إلى خدمة عن بُعد لتنفيذ بعض العمليات قبل العودة، على سبيل المثال، إعادة التوجيه إلى موفِّر هوية تابع لجهة خارجية. قبل أن يغادر المستخدم الموقع الإلكتروني، يتم ضبط ملف تعريف ارتباط يحتوي على رمز مميّز للاستخدام لمرة واحدة مع توقّع إمكانية التحقق من هذا الرمز المميّز في الطلب المكرّر لتجنُّب هجمات تزوير الطلبات على مواقع إلكترونية متعددة (CSRF). إذا كان الطلب الذي تم إرجاعه مقدَّمًا من خلال طريقة POST، عليك وضع علامة SameSite=None; Secure على ملفات تعريف الارتباط.

الموارد البعيدة

أيّ مورد عن بُعد على صفحة، مثل علامات <img> أو علامات <script>، قد يعتمد على ملفات تعريف الارتباط التي يتم إرسالها مع الطلب. تشمل حالات الاستخدام الشائعة وحدات بكسل التتبع وتخصيص المحتوى.

وينطبق ذلك أيضًا على الطلبات المُرسَلة من JavaScript باستخدام fetch أو XMLHttpRequest. في حال استدعاء fetch() باستخدام الخيار credentials: 'include'، من المرجّح أن تتضمّن هذه الطلبات ملفات تعريف الارتباط. بالنسبة إلى XMLHttpRequest، يتم عادةً الإشارة إلى ملفات تعريف الارتباط المتوقّعة باستخدام قيمة withCredentials لـ true. يجب وضع علامة على ملفات تعريف الارتباط هذه بشكل مناسب لتضمينها في الطلبات على مواقع إلكترونية مختلفة.

المحتوى ضمن WebView

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

يسمح نظام التشغيل Android أيضًا لتطبيقاته المخصّصة للنظام الأساسي بإعداد ملفات تعريف الارتباط مباشرةً باستخدام واجهة برمجة التطبيقات CookieManager API. كما هو الحال مع ملفات تعريف الارتباط التي يتم ضبطها باستخدام العناوين أو JavaScript، ننصحك بتضمين SameSite=None; Secure إذا كانت مخصّصة للاستخدام على مستوى المواقع الإلكترونية.

كيفية تنفيذ "SameSite" اليوم

ضَع علامة SameSite=Lax أو SameSite=Strict على أيّ ملفات تعريف ارتباط لا تكون ضرورية إلا في سياق الطرف الأول، وذلك حسب احتياجاتك. إذا لم تضع علامة على ملفات تعريف الارتباط هذه وكنت تعتمد بدلاً من ذلك على السلوك التلقائي للمتصفّح للتعامل معها، يمكن أن تتصرف بطريقة غير متّسقة في جميع المتصفّحات، وقد تؤدي إلى ظهور تحذيرات في وحدة التحكّم لكل ملف تعريف ارتباط.

Set-Cookie: first_party_var=value; SameSite=Lax

احرص على وضع علامة على أي ملفات تعريف ارتباط مطلوبة في سياق تابع لجهة خارجية على أنّها SameSite=None; Secure. يجب تضمين كلتا السمتَين. إذا حدّدت None فقط بدون Secure، سيتم رفض ملفّ تعريف الارتباط. لمراعاة الاختلافات في عمليات تنفيذ المتصفّحات، قد تحتاج إلى استخدام بعض استراتيجية التخفيف الموضّحة في مقالة معالجة البرامج غير المتوافقة.

Set-Cookie: third_party_var=value; SameSite=None; Secure

التعامل مع العملاء غير المتوافقين

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

من بين الحلول الممكنة ضبط كل ملف تعريف ارتباط بالأسلوب الجديد والقديم:

Set-cookie: 3pcookie=value; SameSite=None; Secure
Set-cookie: 3pcookie-legacy=value; Secure

وتضبط المتصفّحات التي تنفّذ السلوك الجديد ملفّ تعريف الارتباط بالقيمة SameSite. تتجاهل المتصفّحات التي لا تطبّق السلوك الجديد هذه القيمة وتضبطملف تعريف الارتباط 3pcookie-legacy. عند معالجة ملفات تعريف الارتباط المضمّنة، يجب أن يتحقق موقعك الإلكتروني أولاً من توفّر ملف تعريف الارتباط الجديد، ثم يعود إلى ملف تعريف الارتباط القديم إذا لم يتمكّن من العثور على ملف جديد.

يوضّح المثال التالي كيفية إجراء ذلك في Node.js باستخدام إطار عمل Express وأحد الوسائط cookie-parser:

const express = require('express');
const cp = require('cookie-parser');
const app = express();
app.use(cp());

app.get('/set', (req, res) => {
  // Set the new style cookie
  res.cookie('3pcookie', 'value', { sameSite: 'none', secure: true });
  // And set the same value in the legacy cookie
  res.cookie('3pcookie-legacy', 'value', { secure: true });
  res.end();
});

app.get('/', (req, res) => {
  let cookieVal = null;

  if (req.cookies['3pcookie']) {
    // check the new style cookie first
    cookieVal = req.cookies['3pcookie'];
  } else if (req.cookies['3pcookie-legacy']) {
    // otherwise fall back to the legacy cookie
    cookieVal = req.cookies['3pcookie-legacy'];
  }

  res.end();
});

app.listen(process.env.PORT);

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

وكحل بديل، يمكنك رصد العميل باستخدام سلسلة وكيل المستخدم عند إرسال عنوان Set-Cookie. راجِع قائمة البرامج غير المتوافقة واستخدِم مكتبة مناسبة لرصد أي وكيل مستخدم لنظامك الأساسي، مثل مكتبة ua-parser-js على Node.js. لا تتطلّب هذه الطريقة سوى إجراء تغيير واحد، ولكن قد لا ترصد عملية فحص وكيل المستخدم جميع المستخدمين المتأثرين.

توفُّر SameSite=None في اللغات والمكتبات وأُطر العمل

تتيح معظم اللغات والمكتبات استخدام السمة SameSite لملفّات تعريف الارتباط. ومع ذلك، بما أنّ إضافة SameSite=None لا تزال نسبيًا حديثة، قد تحتاج إلى معالجة بعض السلوكيات العادية في الوقت الحالي. تم توثيق هذه السلوكيات في مستودع أمثلة SameSite على GitHub.

الحصول على المساعدة

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