وصفات حلوى SameSite

Chrome Firefox وEdge وغيرها سلوكها التلقائي بما يتوافق مع اقتراح IETF Incrementally Better Cookies على النحو التالي:

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

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

Browser Support

  • Chrome: 51.
  • Edge: 16.
  • Firefox: 60.
  • Safari: 13.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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