وصفات حلوى 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.

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

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