في هذا الدرس 13تصفّح المواضيع
صُمم بروتوكول في جوهره ليكون بروتوكولاً عديم الحالة ()؛ أي أن الخادم يعامل كل طلب يصل إليه كعملية مستقلة ومنفصلة تماماً دون ذاكرة ذاتية تربطه بالطلبات السابقة. غير أن تطبيقات الويب الحديثة تحتاج إلى تذكّر هوية المستخدم المسجل دخوله، ومحتويات سلة مشترياته، وتفضيلاته كالمظهر الداكن أو اللغة العربية. وهنا يأتي دور ملفات تعريف الارتباط الكوكيز () والجلسات على الخادم () لبناء طبقة إدارة حالة متكاملة وآمنة فوق بروتوكول .
قبل الغوص في التفاصيل الهندسية، استعرض جدول المصطلحات التقنية الأساسية لهذا الدرس:
| المصطلح بالعربية | المصطلح بالإنجليزية | النطق التقني | المعنى الهندسي المبسط |
|---|---|---|---|
| ملف تعريف الارتباط (الكوكي) | إتش تي تي بي كوكي | قطعة بيانات نصية صغيرة يرسلها الخادم ليحفظها المتصفح ويعيد إرسالها تلقائياً مع الطلبات اللاحقة لنفس النطاق. | |
| حقل إنشاء الكوكي | سيت كوكي هيدر | حقل في رأس استجابة الخادم يأمر المتصفح بحفظ كوكي جديد مع خصائص صلاحيته وأمانه. | |
| معرّف الجلسة | سيشن آي دي | قيمة عشوائية مشفرة وعالية الإنتروبيا تُحفظ داخل الكوكي لربط المتصفح بسجل بيانات المستخدم على الخادم. | |
| منع وصول السكربتات | إتش تي تي بي أونلي | خاصية أمان تمنع أكواد JavaScript (عبر document.cookie) من قراءة الكوكي لحمايته من ثغرات XSS. | |
| العزل عبر المواقع | سيم سايت أتريبيوت | خاصية تتحكم في إرسال الكوكي مع الطلبات العابرة للمواقع (Strict أو Lax أو None) للحماية من هجمات CSRF. | |
| اختطاف الجلسة | سيشن هايجاكينج | استيلاء مهاجم على معرّف الجلسة النشط لانتحال هوية المستخدم الشرعي دون معرفة كلمة مروره. |
لماذا صُمم بروتوكول أصلاً ليكون عديم الحالة؟ لأن غياب الحالة المتصلة يمنح خوادم الويب قدرة هائلة على التوسع الأفقي ()؛ إذ يمكن لأي خادم داخل مزرعة الخوادم الرد على أي طلب دون الحاجة لحفظ حالة اتصال مفتوحة لكل زائر.
ولكن عندما يسجل المستخدم دخوله في الطلب الأول ثم ينتقل في الطلب الثاني إلى لوحة التحكم الخاصة به، فبدون آلية لحفظ الحالة سيسأله الخادم عن اسم المستخدم وكلمة المرور مع كل نقرة! تعالج آلية إدارة الحالة () هذه المشكلة بتمرير تذكرة تعريف خفيفة (ملف كوكي) يمنحها الخادم للمتصفح، ليعيد المتصفح إبرازها تلقائياً مع كل طلب لاحق.
لماذا لا نخزن البيانات الحساسة—مثل رقم المستخدم () أو صلاحية الإدارة ()—مباشرة داخل ملف الكوكي في المتصفح؟ لأن الكوكي موجود على جهاز العميل ويمكن للمستخدم قراءته أو محاولة تعديله، فضلاً عن أن حجمه مقيد بـ 4 كيلوبايت فقط.
لذلك تعتمد تطبيقات الويب الاحترافية على الجلسات من جهة الخادم ():
- معرّف الجلسة العشوائي غير القابل للتخمين (): فور نجاح تسجيل الدخول، يولّد الخادم معرّفاً عشوائياً مشفراً بطول وعشوائية عالية (لا يقل عن 128 بت من الإنتروبيا)، ويرسل هذا المعرّف فقط إلى المتصفح داخل كوكي محمي بخصائص .
- مخزن الجلسات على الخادم (): تُحفظ جميع البيانات الفعلية للمستخدم وصلاحياته بأمان تام على الخادم (داخل ذاكرة سريعة مثل أو قاعدة البيانات) مرتبطة بمعرّف الجلسة.
من الأخطاء الأمنية الخطيرة أن يكتفي زر «تسجيل الخروج» بمسح الكوكي من متصفح المستخدم فقط دون حذف سجل الجلسة من ذاكرة الخادم! فلو كان معرّف الجلسة قد تسرب مسبقاً، فسيظل صالحاً للاستخدام على الخادم رغم خروج المستخدم.
لذلك تتطلب عملية تسجيل الخروج الآمن عبر طلب تنفيذ خطوتين متلازمتين معاً:
- 1. إتلاف سجل الجلسة على الخادم فوراً: حذف بيانات الجلسة من ذاكرة الخادم () ليصبح المعرّف القديم ملغى نهائياً.
- 2. تصفير الكوكي في المتصفح: إرسال حقل الرأس بنفس المسار والنطاق مع قيمة فارغة و، مع إمكانية إضافة حقل الرأس الحديث .
جرّب المختبر التفاعلي الآتي لتتبع دورة حياة الجلسة الكاملة من تسجيل الدخول وتدوير المعرّف حتى الإبطال الكامل عند الخروج:
POST /logout HTTP/1.1
Host: www.closetag.com
Cookie: __Host-sid=auth_new_999
HTTP/1.1 303 See Other
Location: /login
Set-Cookie: __Host-sid=; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Secure; HttpOnly; SameSite=Lax
Clear-Site-Data: "cookies"
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
تعلّمت في هذا الدرس كيف تبني ملفات الكوكيز والجلسات طبقة إدارة الحالة فوق بروتوكول عديم الحالة، وآلية عمل حقلي الرأس و، والفرق بين الكوكيز المؤقتة والدائمة ( و)، ونطاق التوصيل ( و و)، وخصائص الأمان ( و و وبادئة )، والمقارنة الشاملة بين الكوكيز والجلسات، والحماية من اختطاف وتثبيت الجلسة، وإبطال الجلسة الصحيح عند الخروج. الخطوة التالية: انتقل الآن إلى الدرس التالي أساسيات المصادقة في HTTP () لنستكشف آلية التحدي والاستجابة، وحقل الرأس ، والمصادقة الأساسية والرموز الحاملة ()!
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات12
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 HTTP Cookie ملف تعريف الارتباط (HTTP Cookie)
- قطعة بيانات نصية صغيرة (بحد أقصى 4 كيلوبايت) يرسلها الخادم ليحفظها المتصفح ويعيد إرسالها تلقائياً مع الطلبات اللاحقة.
- للمراجعة
- 02 Set-Cookie Header حقل إنشاء الكوكي (Set-Cookie)
- حقل في رأس الاستجابة يستخدمه الخادم لإصدار كوكي جديد وتحديد خصائص صلاحيته وأمانه للمتصفح.
- للمراجعة
- 03 Cookie Request Header حقل إرسال الكوكي (Cookie)
- حقل في رأس الطلب يرسله المتصفح متضمناً أزواج الاسم والقيمة لجميع الكوكيز المحفوظة والمطابقة للنطاق والمسار.
- للمراجعة
- 04 Session Cookie vs Persistent Cookie كوكي الجلسة مقابل الكوكي الدائم
- يبقى كوكي الجلسة في الذاكرة المؤقتة دون تاريخ انتهاء، بينما يُحفظ الكوكي الدائم على القرص لمدة محددة بـ Max-Age أو Expires.
- للمراجعة
- 05 Host-Only Cookie كوكي مقيد بالمضيف (Host-Only Cookie)
- كوكي يُضبط دون كتابة خاصية Domain فيقتصر إرساله على المضيف الأصلي وحده دون أي نطاقات فرعية.
- للمراجعة
- 06 HttpOnly Attribute خاصية منع وصول السكربتات (HttpOnly)
- علامة أمان تمنع أكواد الجافاسكريبت في المتصفح من قراءة الكوكي لحمايته من السرقة عبر ثغرات XSS.
- للمراجعة
- 07 Secure Attribute خاصية اشتراط التشفير (Secure)
- علامة أمان تلزم المتصفح بعدم إرسال الكوكي إلا عبر اتصالات HTTPS المشفرة حصراً.
- للمراجعة
- 08 SameSite Attribute خاصية العزل عبر المواقع (SameSite)
- خاصية تحدد قواعد إرسال الكوكي مع الطلبات العابرة للمواقع (Strict أو Lax أو None) للحماية من هجمات CSRF.
- للمراجعة
- 09 __Host- Cookie Prefix بادئة الحماية الصارمة (__Host-)
- بادئة قياسية لاسم الكوكي تلزم المتصفح باشتراط وجود Secure والمسار Path=/ وعدم وجود خاصية Domain.
- للمراجعة
- 10 Server-Side HTTP Session جلسة الخادم (Server-Side Session)
- معمارية لحفظ بيانات المستخدم الحساسة داخل ذاكرة الخادم مع الاكتفاء بإعطاء المتصفح معرّف جلسة عشوائياً غامضاً.
- للمراجعة
- 11 Session Hijacking اختطاف الجلسة (Session Hijacking)
- هجوم يستولي فيه المهاجم على معرّف الجلسة النشط لانتحال شخصية المستخدم الشرعي دون الحاجة لكلمة المرور.
- للمراجعة
- 12 Session Fixation Defense الحماية من تثبيت الجلسة (Session Rotation)
- إعادة توليد معرّف جلسة جديد كلياً فور نجاح تسجيل الدخول وإتلاف المعرّف القديم لمنع هجمات تثبيت الجلسة.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات5
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 SID SID
- Session Identifier
- معرّف الجلسة العشوائي المشفر الذي يربط متصفح العميل بسجل جلسته المحفوظ على الخادم.
- للمراجعة
- 02 XSS XSS
- Cross-Site Scripting
- ثغرة حقن السكربتات عبر المواقع، وتحمي خاصية HttpOnly كوكيز الجلسات من القراءة المباشرة بواسطتها.
- للمراجعة
- 03 CSRF CSRF
- Cross-Site Request Forgery
- هجوم تزوير الطلبات عبر المواقع، وتُستخدم خاصية SameSite ورموز التحقق للحماية منه.
- للمراجعة
- 04 CHIPS CHIPS
- Cookies Having Independent Partitioned State
- معيار الخصوصية الحديث لتقسيم وعزل كوكيز الطرف الثالث بحسب كل موقع رئيسي.
- للمراجعة
- 05 GMT GMT
- Greenwich Mean Time (HTTP-Date)
- التوقيت القياسي العالمي المعتمد في مواصفات HTTP عند كتابة تاريخ انتهاء الكوكي في خاصية Expires.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
افتح أدوات المطورين في المتصفح (F12 ثم Application ثم Cookies) وافحص جدول الكوكيز للتحقق من تفعيل خصائص HttpOnly وSecure وSameSite.
-
نفّذ الأمر curl -i -c cookies.txt لحفظ الكوكيز الواردة في ملف نصي، ثم افتح الملف لقراءة بنيته وأعد إرساله بالخيار curl -b cookies.txt.
-
استخدم المختبر التفاعلي في الدرس للمقارنة بين الخروج الناقص والخروج الآمن الذي يحذف الجلسة من الخادم ويصفر الكوكي بـ Max-Age=0.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.