يحتوي كل ملف تعريف ارتباط على زوج مفتاح/قيمة بالإضافة إلى عدد من السمات التي تتحكم في وقت استخدام ملف تعريف الارتباط ومكانه.
يتيح لك إدخال سمة 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
لضمان وضوح نيتك.
التغييرات على السلوك التلقائي بدون SameSite
توافق المتصفّح
تتوفّر سمة 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.
نشكرك على المساهمات والملاحظات التي قدّمها كلّ من "ليلي تشين" و"مالتي أوبل" و"مايك ويست" و"روب دوسن" و"توم شتاينر" و"فيفيك سيكار".
الصورة الرئيسية لملف تعريف الارتباط من تأليف Pille-Riin Priske على Unsplash