تعرَّف على كيفية ضبط ملفات تعريف الارتباط التابعة للطرف الأول لضمان الأمان والتوافق مع جميع المتصفّحات وتقليل فرص حدوث أعطال بعد إيقاف ملفات تعريف الارتباط التابعة لجهات خارجية نهائيًا.
يمكن أن تكون ملفات تعريف الارتباط تابعة للطرف الأول أو لجهة خارجية حسب سياق المستخدم، وذلك استنادًا إلى الموقع الإلكتروني الذي يستخدمه المستخدم في الوقت الحالي. إذا كان نطاق ملف تعريف الارتباط ونظامه القابلَين للتسجيل يتطابقان مع الصفحة الحالية ذات المستوى الأعلى، أي ما يتم عرضه في شريط عناوين المتصفّح، يُعتبر ملف تعريف الارتباط من الموقع الإلكتروني نفسه الذي تتوفّر فيه الصفحة، ويُشار إليه بشكل عام باسم ملف تعريف ارتباط الطرف الأول.
يُشار عمومًا إلى ملفات تعريف الارتباط من نطاقات غير الموقع الإلكتروني الحالي باسم ملفات تعريف الارتباط التابعة لجهات خارجية.
وصفة ملفّات تعريف الارتباط الجيدة للطرف الأول
إذا لم يتم استخدام ملف تعريف الارتباط الذي يتم ضبطه على مستوى المواقع الإلكترونية، على سبيل المثال، إذا كان يتم استخدامه لإدارة الجلسات على موقعك الإلكتروني ولم يتم استخدامه مطلقًا في إطار iframe على مستوى المواقع الإلكترونية، يتم استخدام ملف تعريف الارتباط هذا دائمًا في سياق الطرف الأول.
يمكن مشاركة ملفات تعريف الارتباط تلقائيًا على جميع المواقع الإلكترونية، ويمكن الوصول إليها باستخدام JavaScript وإرسالها عبر اتصالات HTTP، ما يعرّضك لبعض المخاطر المتعلقة بالخصوصية والأمان. في حين أنّه يتم العمل باستمرار على تحسين السلوك التلقائي من خلال مبادرة حماية الخصوصية ومقترحات أخرى، مثل ملفات تعريف الارتباط المرتبطة بمصدرها، هناك الكثير من الإجراءات التي يمكنك اتّخاذها اليوم من خلال ضبط سمات إضافية على ملفات تعريف الارتباط.
يُعدّ الإعداد التالي من أفضل الممارسات، إذ يضمن الأمان والتوافق مع جميع المتصفّحات لمعظم ملفات تعريف الارتباط التابعة للطرف الأول. سيوفّر لك قاعدة آمنة يمكنك تعديلها لمنح الأذونات عند الضرورة فقط. تتناول هذه المقالة أيضًا أنواع الوصفات لبعض حالات الاستخدام المحدّدة.
الوصفة
Set-Cookie:
__Host-cookie-name=cookie-value;
Secure;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Lax;
Host
هي بادئة اختيارية تجعل بعض السمات مطلوبة وتحظر غيرها:
- يجب أن يكون الحقل
Secure
متوفّرًا. - يجب حذف
Domain
- يجب أن يكون
Path
/
بعد إضافة Host
، يمكنك الاعتماد على المتصفّح للتحقّق مما إذا تم ضبط هذه السمات بما يتوافق مع قواعد __Host
ورفض ملف تعريف الارتباط في حال عدم استيفائه لهذه القواعد.
تحمي Secure
ملفات تعريف الارتباط من السرقة على الشبكات غير الآمنة لأنّها لا تسمح بإرسال ملفات تعريف الارتباط إلا عبر اتصالات HTTPS. إذا لم تكن قد أكملت نقل موقعك الإلكتروني إلى HTTPS، اجعل ذلك أولوية.
تحدّد السمة Domain
المضيفين الذين يمكنهم تلقّي ملف تعريف ارتباط. يؤدي حذف هذا المَعلم إلى حصر ملف تعريف الارتباط بالمضيف الحالي للمستند، باستثناء النطاقات الفرعية: سيتم إرسال ملف تعريف الارتباط example.com
عند كل طلب إلى example.com
ولكن ليس عند الطلبات إلى images.example.com
. إذا كانت لديك تطبيقات مختلفة تعمل على نطاقات فرعية مختلفة، يقلل ذلك من خطر أن يسمح نطاق واحد تم اختراقه بالوصول إلى النطاقات الأخرى.
يشير Path
إلى المسار الذي يجب أن يكون متوفّرًا في عنوان URL المطلوب لكي يرسل المتصفّح العنوان Cookie
. يعني الإعداد Path=/
أنّه يتم إرسال ملف تعريف الارتباط إلى جميع مسارات عناوين URL في ذلك النطاق. يؤدي عدم تحديد Domain
وPath=/
إلى ربط ملف تعريف الارتباط بالمصدر قدر الإمكان، لذا يعمل بشكل مشابه لمساحة التخزين الأخرى من جهة العميل، مثل LocalStorage
، ولا يترتب على ذلك أي التباس بأنّ example.com/a
قد يتلقّى قيمًا مختلفة عن example.com/b
.
توفّر السمة HttpOnly
بعض الحماية من النصوص البرمجية الضارة التابعة لجهات خارجية على مواقعك الإلكترونية من خلال حظر الوصول إلى JavaScript. ويسمح هذا الإجراء بإرسال ملف تعريف ارتباط في رؤوس الطلبات فقط، ولا يتيح استخدامه من خلال JavaScript باستخدام document.cookie
.
Max-Age
تحدّ من مدة صلاحية ملف تعريف الارتباط لأنّ جلسات المتصفّح يمكن أن تستمر لفترة طويلة جدًا، ولا تريد أن تبقى ملفات تعريف الارتباط القديمة لفترة طويلة. وهو مناسب لملفات تعريف الارتباط قصيرة المدى، مثل جلسات المستخدمين أو حتى تلك الأقصر مثل الرموز المميّزة لإرسال النماذج. يتم تعريف Max-Age
بالثواني، وفي المثال السابق تم ضبطه على 7776000 ثانية، أي 90 يومًا. هذا خيار تلقائي معقول يمكنك تغييره حسب حالة الاستخدام.
SameSite=Lax
يحدّ من إرسال ملف تعريف الارتباط إلا على طلبات الموقع الإلكتروني نفسه. أي عندما يتطابق الطلب مع سياق التصفّح الحالي، وهو الموقع الإلكتروني من المستوى الأعلى الذي يزوره المستخدم حاليًا والذي يظهر في شريط الموقع الجغرافي. SameSite=Lax
هو الإعداد التلقائي في المتصفحات الحديثة، ولكن من الممارسات الجيدة تحديده للتوافق مع جميع المتصفحات التي قد تتضمّن إعدادات تلقائية مختلفة. من خلال وضع علامة على ملف تعريف الارتباط بشكل صريح على أنّه مخصّص للموقع الإلكتروني نفسه فقط، فإنّك تقيّده بسياقات الطرف الأول، ولن تحتاج إلى إجراء تغييرات على ملف تعريف الارتباط هذا عند إيقاف ملفات تعريف الارتباط التابعة لجهات خارجية.
لمزيد من المعلومات عن سمات ملفات تعريف الارتباط المختلفة، اطّلِع على مستندات Set-Cookie
على MDN.
وصفة ملفات تعريف الارتباط الخاصة بالطرف الأول للمواقع الإلكترونية التي تحتوي على نطاقات فرعية
إذا كان لديك موقع إلكتروني يتضمّن نطاقات فرعية وأردت إنشاء جلسة واحدة على مستوى جميع النطاقات الفرعية، يمكن أن تكون البادئة Host
قاسية جدًا. على سبيل المثال، يمكن أن يتضمّن news.site
نطاقات فرعية للمواضيع، مثل finance.news.site
وsport.news.site
، ويمكنك إنشاء جلسة مستخدم واحدة على جميعها. في هذه الحالة، استخدِم البادئة __Secure
بدلاً من __Host
وحدِّد Domain
.
الوصفة
Set-Cookie:
__Secure-cookie-name=cookie-value;
Secure;
Domain=news.site;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Lax;
Secure
هي بادئة اختيارية تفرض متطلبات أقل من Host
: لا تتطلّب سوى ضبط ملف تعريف الارتباط باستخدام السمة Secure
.
حظر الوصول إلى ملفات تعريف الارتباط الخاصة بالطرف الأول في الطلبات التي يتمّ بدؤها من مواقع إلكترونية تابعة لجهات خارجية
على الرغم من أنّه لا يتم إرسال ملفات تعريف الارتباط SameSite=Lax
في الطلبات الفرعية على مستوى مواقع إلكترونية مختلفة (على سبيل المثال، عند تحميل صور أو إطارات iframe مضمّنة على موقع إلكتروني تابع لجهة خارجية)، يتم إرسالها عندما ينتقل المستخدم إلى الموقع الإلكتروني الأصلي (على سبيل المثال، عند النقر على رابط من موقع إلكتروني مختلف).
يمكنك فرض قيود إضافية على الوصول إلى ملفات تعريف الارتباط ومنع إرسالها مع الطلبات التي يتم بدءها من مواقع إلكترونية تابعة لجهات خارجية باستخدام SameSite=Strict
. يكون ذلك مفيدًا عندما تكون لديك ملفات تعريف ارتباط ذات صلة بوظائف ستظلّ دائمًا متاحة بعد التنقّل الأوّلي، مثل تغيير كلمة مرور أو إجراء عملية شراء.
الوصفة
Set-Cookie:
__Host-cookie-name=cookie-value;
Secure;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Strict;