وصفات حلوى SameSite

Rowan Merewood
Rowan Merewood

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 في تطبيق خاص بنظام أساسي بواسطة متصفّح. على المطوّرين إجراء ما يلي: اختبار ما إذا كانت القيود أو المشكلات التي تؤثر في تطبيقاتهم تنطبق أيضًا على مكوّنات WebView الخاصة بتطبيقاتهم.

يتيح Android أيضًا لتطبيقاته الخاصة بالنظام الأساسي ضبط ملفات تعريف الارتباط مباشرةً باستخدام واجهة برمجة تطبيقات CookieManager. وكما هو الحال مع ملفات تعريف الارتباط التي تستخدم الرؤوس أو 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.

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

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