محلّل أمان الكوكيز

بمساعدة الخادم جديد أمان الإنترنت والخصوصية

أدخل رابط الصفحة فيطلبها خادم متقن مرة واحدة دون أي كوكيز ويقرأ ترويسات Set-Cookie في الرد، أو الصق الترويسات من أدوات المطوّر في متصفحك فلا يُرسل شيء. يُقارن كل ملف بقواعد RFC 6265bis التي تطبّقها المتصفحات فعلاً، ويُذكر لكل مشكلة ما سيفعله المتصفح — يرفض الملف أو يتجاهل الخاصية أو يقصّر عمره — والتعديل الذي يصلحها، ثم تُمنح الصفحة درجة من A إلى F.

الخصوصية: يرسل خادم متقن طلبات الاختبار الصغيرة والثابتة الموصوفة في هذه الصفحة إلى المضيف الذي تحدده، ولا يُخزَّن أي شيء. استخدمه فقط مع الأنظمة المصرّح لك باختبارها.
جارٍ تحميل الأداة…

ما خصائص Set-Cookie التي تحمي ملف الجلسة؟

الخاصية Secure تُبقي الملف بعيداً عن HTTP العادي، وHttpOnly تخفيه عن JavaScript فلا يستطيع خطأ XSS قراءته، وSameSite بقيمة Lax أو Strict تمنع المتصفح من إرساله مع الطلبات التي تطلقها مواقع أخرى. وتُلزم البادئة __Host- في الاسم المتصفحَ بفرض Secure وPath=/ وغياب Domain، وتحدّ Max-Age القصيرة من المدة التي تبقى فيها القيمة المسروقة صالحة؛ وتعرّف المواصفة RFC 6265bis هذه القواعد ومتى يرفض المتصفح ملفاً يخالفها.

ملاحظة أمنية: ملف الكوكيز الذي يحمل جلسة هو كلمة مرور طوال مدة صلاحيته. لا تلصق كوكيز جلسات الإنتاج في التذاكر أو المحادثات، وإن انكشف أحدها فأنهِ تلك الجلسة من الخادم.

كيفية استخدام محلّل أمان الكوكيز

  1. أدخل رابط الصفحة، أو الصق ترويسات Set-Cookie من أدوات المطوّر في متصفحك (تبويب Network ← الطلب الذي يضبط الملف ← Response Headers).
  2. أبقِ خيار «اتباع عمليات إعادة التوجيه» مفعّلاً لتحليل الصفحة التي تنتهي إليها، وألغِه إن كان الملف الذي يهمك يُضبط في رد إعادة توجيه، كالرد على نموذج تسجيل الدخول.
  3. اضغط «حلّل الكوكيز» واقرأ الدرجة وسببها، ثم راجع النتائج من «عالية» نزولاً إلى «معلومة».
  4. قارن الخصائص جنباً إلى جنب في جدول الكوكيز، ونزّل أي جدول بصيغة CSV لإرفاقه بتذكرة أو تقرير تدقيق.

مزايا محلّل أمان الكوكيز

  • يقرأ ترويسات Set-Cookie لصفحة حيّة عبر خادم متقن، أو قائمة تلصقها من أدوات المطوّر أو من curl -I، ويتخطّى بقية الترويسات الموجودة في النص الملصوق
  • يفحص كل ملف وفق RFC 6265bis: الخصائص Secure وHttpOnly وSameSite، والبادئتين __Host- و__Secure-، ونطاق Domain وPath، وMax-Age وExpires، وحدَّي 4096 بايت و400 يوم
  • يقول ما يفعله المتصفح فعلاً بكل مشكلة — يرفض الملف أو يتجاهل الخاصية أو يقصّر مدته — ويذكر التعديل الذي يصلحها
  • يتعرّف إلى كوكيز الجلسة وتسجيل الدخول وحماية CSRF من أسمائها ويحاسبها بمعيار أشد، ولا يعدّ غياب HttpOnly عن رمز CSRF تقرؤه السكربتات خطأً
  • يمنح الصفحة درجة من A إلى F مع سقوف تمنع ملف جلسة مكشوفاً واحداً من الاختباء خلف عشرات من كوكيز التحليلات غير الضارة
  • يُخفي كل قيمة قبل عرضها أو تصديرها: يظهر معرّف الجلسة بأول حروفه وآخرها فقط
  • يعامل ترويسات الحذف (Max-Age=0 أو تاريخ Expires منقضٍ) على حدة: يتحقق من Domain وPath اللذين يجعلان الحذف يعمل، ولا يدخلها في الدرجة

المدخلات والمخرجات

المدخلات

  • رابط الصفحة — عنوان http:// أو https://، ويُقرأ المضيف المجرد مثل example.com على أنه https://. يرسل خادم متقن طلب GET واحداً بمجموعة ترويسات ثابتة تعرّف بوسيط متقن (User-Agent MutqanTools-Relay/1.0)، ودون أي كوكيز.
  • اتباع عمليات إعادة التوجيه — مفعّل افتراضياً (حتى 5 قفزات)، وألغِه لتحليل كوكيز الرد الأول.
  • الترويسات الملصوقة — أسطر Set-Cookie بالبادئة «Set-Cookie:» أو دونها، حتى 500 سطر، وتُتخطّى أسطر الحالة والترويسات الأخرى. عند وجودها لا يُجلب شيء، ويفيد الرابط فقط في معرفة مضيف الصفحة وبروتوكولها.

المخرجات

  • الملخّص — الدرجة والنقاط، وعدد الكوكيز، وكم منها يحمل Secure وHttpOnly، وكم يستخدم SameSite=None، وكم ترويسة تحذف ملفاً فقط.
  • النتائج — كل مشكلة بخطورتها والملف الذي تخصه والتعديل الذي يصلحها، الأخطر أولاً.
  • الكوكيز — صف لكل ترويسة Set-Cookie: القيمة المخفية وSecure وHttpOnly وSameSite والنطاق والمسار والمدة بالأيام والحجم بالبايت وعدد المشكلات.
  • سبب الدرجة وتفاصيل الجلب — السقف الذي حدّد الدرجة، وللصفحة المجلوبة الرابط النهائي والحالة وعدد مرات إعادة التوجيه والعنوان الذي حُلّ إليه المضيف ومدة الجلب.

مثال على محلّل أمان الكوكيز

خمسة ملفات كوكيز ملصوقة من رد تسجيل الدخول

الإدخال:

Page URL: https://www.example.com/
Set-Cookie: sessionid=8f2c41d9a7e34b05b1c6e2f09d3a7c18; Path=/; HttpOnly
Set-Cookie: csrftoken=Zq81LmP0aXv3; Path=/; Secure; SameSite=Lax; Max-Age=31449600
Set-Cookie: __Host-prefs=lang%3Den; Path=/; Secure; SameSite=Strict
Set-Cookie: _ga=GA1.1.1234567890.1760000000; Domain=.example.com; Path=/; Max-Age=63072000; SameSite=Lax
Set-Cookie: tracking=abc; SameSite=None; Path=/

النتيجة:

الدرجة D ‏(81/100) — سقفها D: ملف يشبه ملف جلسة فيه مشكلة عالية الخطورة
الكوكيز 5 · مع Secure ‏2/5 · مع HttpOnly ‏1/5 · SameSite=None ‏1
عالية · sessionid · ينقصه Secure
عالية · tracking · SameSite=None دون Secure — مرفوض
متوسطة · sessionid · لا توجد خاصية SameSite
متوسطة · _ga وtracking · ينقصه Secure
منخفضة · _ga · الخاصية Domain تشارك الملف مع كل النطاقات الفرعية · مدة أطول من 400 يوم
معلومة · csrftoken · مؤهَّل للبادئة __Host-
تظهر قيمة sessionid هكذا: 8f2…c18

كيف تقرأ نتائج محلّل أمان الكوكيز

«عالية» تعني أن المتصفح يرفض الملف أو أن ملف جلسة مكشوف (لا Secure أو لا HttpOnly أو بادئة مخالفة أو Domain هو لاحقة عامة) فابدأ بها. و«متوسطة» تُضعف الحماية (لا SameSite، أو ملف جلسة يُرسَل عبر المواقع، أو جلسة طويلة العمر). أما «منخفضة» و«معلومة» فتنظيم وتلميحات.

الدرجة A تعني أن كل ملف حيّ قريب من أفضل الممارسات فيما تستطيع الترويسة إظهاره، ولا تقول شيئاً عن طريقة الخادم في إنشاء الجلسات وتدويرها وإنهائها.

كلمة «مرفوض» في النتيجة تعني أن المتصفح لا يخزّن الملف أبداً، فما يعتمد عليه معطّل فعلاً في ذلك المتصفح حتى لو بدا الموقع سليماً في متصفح آخر.

ظهور «لا توجد ترويسات Set-Cookie» لصفحة مجلوبة أمر شائع: كثير من المواقع لا تضبط الكوكيز إلا بعد تسجيل الدخول أو بعد الموافقة أو من JavaScript. حلّل الرد الذي يضبط الملف الذي يهمك.

الملف الخالي من SameSite تعامله المتصفحات المبنية على Chromium على أنه Lax، بينما ما زال Safari وFirefox يرسلانه عبر المواقع في بعض الحالات، فيختلف سلوكه من متصفح لآخر؛ وضبط الخاصية صراحةً يزيل هذا الالتباس.

متى تستخدم محلّل أمان الكوكيز

  • التأكد قبل الإطلاق من أن مسار تسجيل الدخول الجديد يضبط ملف الجلسة بالخصائص Secure وHttpOnly وSameSite.
  • مراجعة كوكيز التحليلات والإعلانات بحثاً عن SameSite=None دون Secure، وهي ملفات تُسقطها المتصفحات بصمت.
  • كتابة ملاحظة اختبار اختراق أو تدقيق تسمّي الخاصية الناقصة والقاعدة التي تشترطها.
  • التحقق من أن رد تسجيل الخروج يحذف ملف الجلسة فعلاً، بقيم Domain وPath مطابقة للملف الأصلي.

استكشاف الأخطاء وإصلاحها

  • «لم يُعثر على ترويسة Set-Cookie في النص الملصوق»: انسخ ترويسات الرد لا ترويسات الطلب، من الطلب الذي يضبط الملف. في أدوات المطوّر اختر الطلب ثم Headers وانسخ قسم Response Headers.
  • الصفحة المجلوبة بلا كوكيز مع أن متصفحك يحمل بعضها: قد تكتبها JavaScript، أو يضبطها طلب آخر في الصفحة، أو تُضبط بعد شريط الموافقة، أو للمستخدمين المسجّلين فقط. الصق ترويسات ذلك الرد بدلاً من ذلك.
  • «لا يمكن الوصول إلى هذا العنوان من خادم متقن»: يُحلّ المضيف إلى عنوان خاص أو محجوز، أو ترفضه قواعد الأمان في الخادم. ويمكنك مع ذلك فحص موقع داخلي بلصق ترويساته.
  • فحوص مطابقة Domain وSecure عبر HTTP غائبة في وضع اللصق: أدخل رابط الصفحة أيضاً، فهو يُستخدم سياقاً فقط ولا يُجلب شيء.

الأسئلة الشائعة حول محلّل أمان الكوكيز

لماذا ظهر ملف الكوكيز عندي على أنه «مرفوض»؟

لأن المتصفح لن يخزّنه أصلاً: SameSite=None دون Secure، أو بادئة __Host- أو __Secure- لم تُستوفَ قواعدها، أو Domain لا يغطي مضيف الصفحة أو هو لاحقة عامة، أو ملف Partitioned دون Secure، أو اسم وقيمة يتجاوزان 4096 بايت. تذكر النتيجة القاعدة المخالفة، وإلى أن تُصلحها لا يعمل في ذلك المتصفح ما يعتمد على هذا الملف.

كيف تعرف الأداة أن الملف ملف جلسة؟

من اسمه: إذا احتوى كلمة جلسة أو دخول أو رمز جزءاً كاملاً من الاسم — مثل session وsid وauth وtoken وjwt وlogin وremember وrefresh وcsrf — ومن ذلك الأسماء المركّبة مثل JSESSIONID وPHPSESSID وconnect.sid وlaravel_session. تُحاسَب هذه الملفات بمعيار أشد لأن كشفها يكشف الحساب نفسه. والاسم مجرد قرينة، فلا تغيّر أسماء ملفاتك من أجل الأداة.

هل يلزم رمز CSRF في الكوكيز أن يحمل HttpOnly؟

لا، إن كانت واجهتك الأمامية تقرؤه لترسله في ترويسة مع الطلب (نمط double-submit)، ولهذا يظهر غيابه بمستوى «معلومة» لا خطأً. أما إن كان الخادم وحده يقارن الرمز فأضف HttpOnly.

لماذا لا تظهر كوكيز للصفحة مع أن متصفحي يحمل الكثير منها؟

لأن خادم متقن يرسل طلباً واحداً دون أي كوكيز ودون تسجيل دخول. الملفات التي تكتبها JavaScript، أو تضبطها طلبات أخرى في الصفحة، أو تُضبط بعد شريط الموافقة أو بعد تسجيل الدخول، لا تظهر في ذلك الرد. انسخ ترويسات Set-Cookie للرد الذي يهمك من أدوات المطوّر والصقها هنا.

هل تُرسل قيم الكوكيز أو تُخزَّن في مكان ما؟

في وضع اللصق يجري التحليل كله داخل متصفحك. وفي وضع الرابط يجلب الخادم الصفحة ويعيد ترويساتها إلى متصفحك دون أن يخزّنها. وفي الحالتين تُخفى القيم قبل عرضها أو تصديرها.

ماذا تعني عبارة «مؤهَّل للبادئة __Host-»؟

أن الملف يحمل أصلاً Secure وPath=/ ولا يحمل Domain. إن غيّرت اسمه إلى __Host-name ألزم المتصفح بهذه القواعد، فلا يستطيع نطاق فرعي أو رد عبر HTTP عادي أن يستبدله. إنها توصية لا عيب.

ملاحظات تقنية

يتبع التحليل RFC 6265bis (المسودة draft-ietf-httpbis-rfc6265bis، وهي المراجعة التي تطبّقها المتصفحات لـ RFC 6265): أسماء الخصائص لا تميّز حالة الأحرف، وآخر ظهور للخاصية هو المعتمد، ويُقرأ Expires بخوارزمية تاريخ الكوكيز في RFC 6265 §5.1.1 لا بمحلّل تواريخ عام، وتتقدّم Max-Age على Expires.

قواعد المتصفح المطبّقة: لا يُضبط ملف Secure من صفحة http://، وSameSite=None تشترط Secure، و__Secure- تشترط Secure، و__Host- تشترط معها Path=/ وغياب Domain (وتُطابَق البادئات دون تمييز الحالة)، ويجب أن يطابق Domain مضيف الصفحة وألّا يكون لاحقة عامة (بحسب قائمة اللواحق العامة المضمّنة)، ويُرفض الملف إن تجاوز اسمه وقيمته 4096 بايت وتُتجاهل الخاصية إن تجاوزت قيمتها 1024 بايت، وتُقصَّر المدة إلى 400 يوم، ويشترط الملف Partitioned ‏(CHIPS) أن يكون Secure.

الاحتساب: يبدأ كل ملف حيّ من 100 ويخسر 25 عن كل مشكلة عالية و10 عن المتوسطة و3 عن المنخفضة؛ ودرجة الصفحة هي المتوسط مطروحاً منه 5 عن كل اسم مكرر و10 إن زادت الكوكيز على 50 لنطاق واحد. A من 90 فما فوق، وB من 75، وC من 60، وD من 40، وF أقل من 40. والسقوف: F إذا خلا ملف جلسة من Secure وHttpOnly معاً، وD إذا ضُبطت ملفات الجلسة عبر HTTP أو كان في ملف جلسة مشكلة عالية، وC إذا كان في أي ملف مشكلة عالية.

يُتعرَّف إلى أسماء الجلسات كلمةً كلمة (sid وsession وauth وtoken وjwt وlogin وremember وrefresh وcsrf وxsrf، والمركّبات مثل JSESSIONID وPHPSESSID وconnect.sid)، فلا تُحسب أسماء مثل sidebar_state أو device_id ملفات جلسة.

الحدود ومنهجية القياس

لا تُرى إلا الكوكيز التي تضبطها ترويسات رد HTTP. أما ما تكتبه JavaScript، أو تضبطه طلبات أخرى في الصفحة (سكربتات وصور واستدعاءات API)، أو إطارات الجهات الخارجية، فلا يظهر في طلب واحد للصفحة.

يصدر الطلب من خادم متقن على شبكة Cloudflare بصفة زائر أول مرة بلا كوكيز ولا تسجيل دخول. وقد يضبط الموقع كوكيز مختلفة لمتصفح حقيقي أو لمنطقة معيّنة أو لمستخدم مسجّل أو بعد الموافقة، وبعض المواقع تعترض الطلبات الآلية.

عند اتباع عمليات إعادة التوجيه لا تُعاد الكوكيز التي تضبطها الردود الوسيطة؛ ألغِ «اتباع عمليات إعادة التوجيه» لقراءة الرد الأول.

تغطي الدرجة ما تستطيع الترويسة إظهاره فقط. أما تثبيت الجلسة وعشوائية الرموز وانتهاء الجلسة في الخادم ودفاعات CSRF فلا يمكن اختبارها من خصائص الكوكيز.

الأمان والخصوصية

في وضع الرابط يُرسل الرابط إلى خادم متقن، فيرسل طلب GET واحداً إلى الصفحة ويعيد ترويسات ردها إلى متصفحك، ولا يُخزَّن شيء. وفي وضع اللصق لا تغادر الترويسات متصفحك.

قد تحتوي الترويسات الملصوقة على معرّفات جلسات حيّة. تُخفى القيم قبل العرض والتصدير، لكن تعامل مع النص الملصوق على أنه سرّ، وسجّل الخروج أو جدّد الجلسة إن كانت من بيئة الإنتاج.

المراجع

  • Cookies: HTTP State Management Mechanism (draft-ietf-httpbis-rfc6265bis)IETF HTTP Working Groupمراجعة RFC 6265 التي تطبّقها المتصفحات: SameSite، والبادئتان __Host- و__Secure-، وسقف المدة 400 يوم، وحدود الحجم، ومتى يُرفض ملف الكوكيز.
  • RFC 6265: HTTP State Management MechanismIETF · 2011كيف تُضبط ملفات تعريف الارتباط وتُرسَل: سمات Set-Cookie (Expires وMax-Age وDomain وPath وSecure وHttpOnly) وقواعد نطاقها.
  • Set-Cookie header — MDNMDN Web Docs (Mozilla)كل خاصية من خصائص Set-Cookie ودعم المتصفحات لها، ومنها Partitioned ‏(CHIPS) وبادئات أسماء الكوكيز.