يحتوي كل ملف تعريف ارتباط على زوج المفتاح/القيمة مع عدد من السمات التي تتحكّم في وقت ومكان استخدام ملف تعريف الارتباط.
تتيح لك إضافة السمة SameSite
(المحدّدة في RFC6265bis) توضيح ما إذا كان ملف تعريف الارتباط يقتصر على سياق الطرف الأول أو سياق الموقع الإلكتروني نفسه. ومن المفيد فهم معنى كلمة "موقع" هنا بالضبط.
إنّ الموقع الإلكتروني هو تركيبة من لاحقة النطاق وجزء من النطاق الذي يسبقه مباشرةً. على سبيل المثال، النطاق www.web.dev
هو جزء من موقع web.dev
الإلكتروني.
مصطلح رئيسي: إذا كان المستخدم على "www.web.dev
" ويطلب صورة من
static.web.dev
، هذا الطلب هو الموقع الإلكتروني نفسه.
تحدد قائمة اللاحقات العامة الصفحات التي يتم احتسابها على أنها تظهر على الموقع نفسه. لا يعتمد فقط على نطاقات المستوى الأعلى مثل .com
،
ولكن يمكن أن يتضمّن أيضًا خدمات مثل github.io
. يتيح ذلك الإجراء
احتساب your-project.github.io
وmy-project.github.io
كموقعَين إلكترونيَّين منفصلَين.
مصطلح رئيسي: إذا كان المستخدم على "your-project.github.io
" ويطلب صورة من
my-project.github.io
، يُعتبر ذلك طلبًا من عدة مواقع إلكترونية.
استخدام سمة SameSite
للإعلان عن استخدام ملفات تعريف الارتباط
توفر السمة SameSite
في ملف تعريف الارتباط ثلاث طرق مختلفة للتحكم في هذا السلوك. يمكنك اختيار عدم تحديد السمة أو استخدام السمة Strict
أو السمة Lax
لحصر ملف تعريف الارتباط على الطلبات الواردة من الموقع الإلكتروني نفسه.
في حال ضبط السمة SameSite
على Strict
، لا يمكن إرسال ملف تعريف الارتباط إلا في سياق الطرف الأول، أي إذا تطابق الموقع الإلكتروني الخاص بملف تعريف الارتباط مع الموقع الإلكتروني المعروض في شريط عناوين المتصفّح. وبالتالي، إذا تم ضبط ملف تعريف الارتباط promo_shown
على النحو التالي:
Set-Cookie: promo_shown=1; SameSite=Strict
وعندما يزور المستخدم موقعك الإلكتروني، يتم إرسال ملف تعريف الارتباط مع الطلب على النحو المتوقّع.
ومع ذلك، إذا اتّبع المستخدم رابطًا إلى موقعك من رابط آخر، لن يتم إرسال ملف تعريف الارتباط بناءً على هذا الطلب الأولي.
وينطبق ذلك دائمًا على ملفات تعريف الارتباط المتعلقة بالميزات التي تخضع دائمًا للتنقُّل الأولي، مثل تغيير كلمة مرور أو إجراء عملية شراء، ولكنه محظور جدًا بالنسبة إلى ملف تعريف ارتباط مثل promo_shown
. إذا اتبع القارئ الرابط المؤدي إلى الموقع، فإنه يريد إرسال ملف تعريف الارتباط حتى يمكن تطبيق تفضيلاته.
يسمح SameSite=Lax
للمتصفّح بإرسال ملف تعريف الارتباط باستخدام عمليات التنقّل في المستوى الأعلى هذه. على سبيل المثال، إذا كان موقع إلكتروني آخر يشير إلى محتوى موقعك الإلكتروني، يمكنك في هذه الحالة استخدام صورة قطتك وتقديم رابط يؤدي إلى مقالتك على النحو التالي:
<p>Look at this amazing cat!</p>
<img src="https://blog.example/blog/img/amazing-cat.png" />
<p>Read the <a href="https://blog.example/blog/cat.html">article</a>.</p>
عند ضبط ملف تعريف الارتباط على Lax
على النحو التالي:
Set-Cookie: promo_shown=1; SameSite=Lax
عندما يطلب المتصفّح amazing-cat.png
لمدوّنة المستخدم الآخر، لا يرسل موقعك الإلكتروني ملف تعريف الارتباط. وعندما يتّبع القارئ الرابط cat.html
على موقعك الإلكتروني، يتضمّن هذا الطلب ملف تعريف الارتباط.
ننصح باستخدام SameSite
بهذه الطريقة، من خلال ضبط ملفات تعريف الارتباط التي تؤثر في عرض الموقع الإلكتروني
على Lax
، وملفات تعريف الارتباط ذات الصلة بإجراءات المستخدم على Strict
.
يمكنك أيضًا ضبط SameSite
على None
للإشارة إلى أنّك تريد إرسال ملف تعريف الارتباط
في جميع السياقات. إذا كنت تقدّم خدمة تستخدمها المواقع الإلكترونية الأخرى، مثل الأدوات أو المحتوى المضمّن أو برامج الشركاء التابعين أو الإعلانات أو تسجيل الدخول على
مواقع إلكترونية متعددة، عليك استخدام None
للتأكّد من أنّ هدفك واضح.
![ثلاثة ملفات تعريف ارتباط تم تصنيفها "بدون" أو Lax أو "متشدّد" حسب سياقها](https://web.dev/static/articles/samesite-cookies-explained/image/three-cookies-labelled-no-495f9afccf1cd.png?authuser=5&hl=ar)
None
أو Lax
أو Strict
على سياق ملف تعريف الارتباط بوضوح.
إجراء تغييرات على السلوك التلقائي بدون SameSite
التوافق مع المتصفح
- 80
- 86
- x
يُسمح باستخدام السمة SameSite
على نطاق واسع، ولكن لم يتم اعتمادها على نطاق واسع.
في السابق، كان ضبط ملفات تعريف الارتباط بدون SameSite
يؤدي تلقائيًا إلى إرسالها في جميع السياقات، ما يجعل المستخدمين عُرضة لخطر CSRF وتسرُّب المعلومات غير المقصود. لتشجيع المطوّرين على توضيح نواياهم
وتوفير تجربة أكثر أمانًا للمستخدمين، يحدّد اقتراح مجموعة مهندسي شبكة الإنترنت (IETF)
ملفات تعريف الارتباط بشكل تزايدي
تغييرَين رئيسيَين:
- يتم التعامل مع ملفات تعريف الارتباط التي لا تتضمّن السمة
SameSite
على أنّهاSameSite=Lax
. - يجب أن تحدد ملفات تعريف الارتباط التي تتضمّن
SameSite=None
أيضًا السمةSecure
، ما يعني أنّها تتطلّب سياقًا آمنًا.
يتوافق هذَين التغييرَين مع الأنظمة القديمة مع المتصفّحات التي طبّقت الإصدار السابق من السمة SameSite
بشكل صحيح، فضلاً عن المتصفحات التي لا تتوافق مع إصدارات SameSite
السابقة. وتهدف إلى تقليل اعتماد المطورين على السلوك الافتراضي للمتصفحات من خلال جعل سلوك ملفات تعريف الارتباط والاستخدام المقصود صريحًا. على أي عملاء لا يتعرّفون
على SameSite=None
تجاهله.
SameSite=Lax
تلقائيًا
إذا أرسلت ملف تعريف ارتباط بدون تحديد السمة SameSite
، سيتعامل المتصفّح
مع ملف تعريف الارتباط هذا كما لو تم ضبطه على SameSite=Lax
. ما زلنا نقترح عليك ضبط SameSite=Lax
بشكل صريح لجعل تجربة المستخدم أكثر اتساقًا على المتصفحات.
يجب أن يكون "SameSite=None
" آمنًا.
عند إنشاء ملفات تعريف ارتباط لمواقع إلكترونية متعددة باستخدام SameSite=None
، يجب أيضًا ضبطها على Secure
لكي يقبلها المتصفّح:
Set-Cookie: widget_session=abc123; SameSite=None; Secure
يمكنك اختبار هذا السلوك اعتبارًا من الإصدار 76 من Chrome من خلال تفعيل
about://flags/#cookies-without-same-site-must-be-secure
، ومن خلال الإصدار 69 من Firefox من خلال إعداد network.cookie.sameSite.noneRequiresSecure
في
about:config
.
ننصحك أيضًا بتعديل ملفات تعريف الارتباط الحالية إلى Secure
في أقرب وقت ممكن.
إذا كنت تعتمد على خدمات توفّر محتوى تابعًا لجهة خارجية على موقعك الإلكتروني، تأكَّد من أنّ مقدِّم الخدمة يعدّل ملفات تعريف الارتباط لديه وعدِّل أي مقتطفات أو تبعيات على موقعك الإلكتروني للتأكّد من أنّه يستخدم السلوك الجديد.
وصفات إعداد الكعكات في SameSite
للحصول على مزيد من التفاصيل حول تعديل ملفات تعريف الارتباط للتعامل بنجاح مع هذه
التغييرات في SameSite=None
والاختلافات في سلوك المتصفّح، يمكنك الاطّلاع على المقالة التالية، وصفات كعك
SameSite.
نشكرك على المساهمات والملاحظات التي يقدّمها "ليلي تشن" و"مالتي أوبل" و"مايك ويست" و"روب دودسون" و"توم شتاينر" و"فيفيك سيكار".
صورة الجزء الرئيسي من ملف تعريف الارتباط من إعداد بيل رين بريسكي على UnLaunch