Chrome، Firefox Edge، والبعض الآخر يغيِّر سلوكه التلقائي بما يتماشى مع مجموعة مهندسي شبكة الإنترنت (IETF) أو اقتراح ملفات تعريف ارتباط أفضل بشكل متزايد وبالتالي:
- يتم التعامل مع ملفات تعريف الارتباط التي لا تتضمّن السمة
SameSite
على أنّهاSameSite=Lax
. مما يعني أن السلوك الافتراضي هو تقييد ملفات تعريف الارتباط على الطرف الأول السياقات فقط. - يجب أن تحدّد ملفات تعريف الارتباط المخصّصة للاستخدام على مواقع إلكترونية متعددة الإذن
SameSite=None; Secure
إلى ليتم تضمينها في سياق الطرف الثالث.
إذا لم تكن قد قمت بذلك بالفعل، يجب عليك تحديث السمات ملفات تعريف الارتباط للجهات الخارجية كي لا يتم حظرها في المستقبل.
حالات استخدام ملفات تعريف الارتباط على مواقع إلكترونية متعددة أو تابعة لجهات خارجية
هناك عدد من حالات الاستخدام والأنماط الشائعة التي يلزم فيها الاحتفاظ بملفات تعريف الارتباط يتم إرسالها في سياق تابع لجهة خارجية. إذا كنت توفّر إحدى طرق الاستخدام هذه أو تعتمد عليها فتأكد من تحديث ملفات تعريف الارتباط الخاصة بك أو بواسطة مزود الخدمة إلى الحفاظ على عمل الخدمة بشكل صحيح.
محتوى ضمن <iframe>
المحتوى من موقع إلكتروني مختلف معروض في <iframe>
تابع لجهة خارجية
السياق. تشمل حالات الاستخدام العادية ما يلي:
- المحتوى المضمن الذي تتم مشاركته من المواقع الأخرى، مثل مقاطع الفيديو والخرائط وعينات التعليمات البرمجية ومشاركاتك على الشبكات الاجتماعية.
- تطبيقات مصغّرة من خدمات خارجية، مثل عمليات الدفع والتقاويم والحجز الحجز.
- أدوات مثل الأزرار الاجتماعية أو خدمات مكافحة الاحتيال التي تبدو أقل وضوحًا
<iframes>
يمكن استخدام ملفات تعريف الارتباط هنا للحفاظ على حالة الجلسة أو تخزين بعض الإجراءات الأخرى الإعدادات المفضّلة العامة أو تمكين الإحصاءات أو تخصيص المحتوى للمستخدمين الذين لديهم الحسابات الحالية.
بما أنّ الويب قابل للإنشاء بطبيعتها، يتم استخدام <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.
الحصول على المساعدة
تُستخدم ملفات تعريف الارتباط في كل مكان على الويب، ومن النادر أن يقوم أي فريق تطوير إلى اكتساب معرفة كاملة بأماكن تركيبها واستخدامها، خاصةً في حالات الاستخدام عبر المواقع. عندما تواجه مشكلة، قد تكون هي المرة الأولى واجه أي شخص ذلك، لذلك لا تتردد في التواصل معنا:
- يمكنك طرح مشكلة في
أمثلة على مستودع واحد (
SameSite
) على GitHub. - يمكنك طرح سؤال في "samesite" على StackOverflow.
- لمعالجة المشاكل المتعلقة بسلوك Chromium، يمكنك الإبلاغ عن خطأ في أداة تتبُّع مشاكل Chromium
- يمكنك متابعة مستوى تقدُّم Chrome في
صفحة التعديلات "
SameSite
".