إذا قمت بتثبيت إضافة “Last Login” وفجأة بدت شاشة مستخدمي WordPress منظمة، فإن هذا الترتيب يخدعك. تبدو التواريخ موثوقة، ويمكنك فرزها، وتبدو وكأنها حقائق ثابتة، لكنها ليست كذلك. لم يقم WordPress مطلقًا بتخزين تاريخ آخر تسجيل دخول بشكل أصلي، وكل قيمة في هذا العمود هي مجرد نتاج لذاكرة انتقائية.
التاريخ الذي لم يكن موجودًا قط
يحتفظ WordPress بالحسابات في جدول مستخدمين (users table) بسيط؛ حيث يخزن الأسماء، ورسائل البريد الإلكتروني، وتجزئات كلمات المرور (password hashes)، وتواريخ التسجيل. ولكن ما يغيب بشكل ملحوظ هو أي حقل يسجل متى قام شخص ما بآخر عملية مصادقة (authentication). لقد كان الأمر دائمًا على هذا النحو.
عندما تقوم بتثبيت إضافة لسد هذه الفجوة، فإنها ترتبط بعملية تسجيل الدخول وتكتب طابعًا زمنيًا (timestamp) في بيانات المستخدم الوصفية (user metadata). هذه هي الآلية بأكملها؛ فهي لا تعود إلى الوراء في سجلات الخادم (server logs) الخاصة بك أو تعيد بناء الجلسات السابقة، بل تبدأ ببساطة في المراقبة من لحظة تفعيلها.
تخيل موقعًا يعمل منذ خمس سنوات، حيث قام المئات من المحررين والمشتركين والمقاولين بتسجيل الدخول خلال تلك الفترة. قمت بتثبيت إضافة تتبع في عصر يوم الثلاثاء، وفي صباح يوم الأربعاء، قام محرر أول بتسجيل الدخول، فتقوم الإضافة بتسجيل الوقت والتاريخ. لكن حساب المسؤول الخاص بك لا يظهر شيئًا لأنك لم تسجل دخولك منذ التثبيت. كما أن حساب مستقيل قديم من عام 2021 لا يظهر شيئًا أيضًا. يجعل العمود الأمر يبدو وكأن لا أحد منكما قد لمس الموقع من قبل. في الواقع، لم يكن للتسجيل ماضٍ ببساطة؛ فهو يعامل غياب البيانات كدليل على الغياب، وهو افتراض خطير عندما تقوم بإدارة صلاحيات الوصول.
ثلاث طرق يضللك بها هذا العمود
بمجرد تشغيل الإضافة، ينتقل الوهم من تاريخ مفقود إلى تقارير حالية غير دقيقة. هناك ثلاثة فخاخ محددة.
تتبع المصادقة وليس النشاط
عندما يختار المستخدم “Remember Me” في شاشة تسجيل دخول WordPress، يتلقى المتصفح ملف تعريف ارتباط للمصادقة (authentication cookie) يمكن أن يظل صالحًا لمدة تصل إلى أربعة عشر يومًا. خلال هذه الفترة، يمكن للمستخدم فتح لوحة التحكم، ونشر المقالات، وإدارة التعليقات، وتحديث الإعدادات دون الحاجة إلى إعادة كتابة كلمة المرور مرة أخرى. وتكون جلسته حية ونشطة.
ومع ذلك، فإن معظم إضافات "آخر تسجيل دخول" تستمع لإجراء wp_login. لا يتم تشغيل هذا الإجراء إلا عند إرسال بيانات الاعتماد عبر النموذج، وليس عند تحديث جلسة موجودة بالفعل. لذا، يمكن للمحرر الخاص بك تسجيل الدخول صباح يوم الاثنين، والحفاظ على جلسة المتصفح نشطة، والعمل داخل منطقة المسؤول كل يوم لمدة أسبوعين متتاليين، ومع ذلك سيظل العمود يشير إلى أن تسجيل الدخول كان منذ أربعة عشر يومًا. أي مراجعة أمنية تعتمد على ذلك الطابع الزمني ستصنف الحساب على أنه خامل، بينما هو ليس خاملًا على الإطلاق. أنت تنظر إلى وقت كتابة كلمة المرور، وليس إلى آخر مرة تواجد فيها إنسان داخل منزلك.
تخفي الحسابات الخاملة أثناء عمليات التدقيق
تقوم معظم الإضافات بتنفيذ العمود القابل للفرز عن طريق ربط جدول المستخدمين (users table) بجدول usermeta. من الناحية الهيكلية، هذا منطقي، ولكن من الناحية العملية، فإنه يتسبب في خلل في الرؤية.
إذا لم يقم مستخدم بالمصادقة مطلقًا منذ تفعيلك للإضافة، فلن يكون هناك ببساطة أي صف في usermeta لهذا المفتاح. عندما تقوم بفرز قائمة المستخدمين حسب “Last Login” للعثور على أقدم حساباتك، فإن الاستعلام الأساسي غالبًا ما يستبعد المستخدمين الذين يفتقرون إلى البيانات الوصفية، مما يؤدي إلى اختفائهم تمامًا من العرض المفرز.
تقوم بإجراء تدقيق للتنظيف، فتقوم بالفرز تنازليًا وترى أربعين مستخدمًا بتواريخ قديمة متزايدة. تحدد بثقة مجموعة لتعطيلها، لكنك لم ترَ أبدًا حسابات المقاولين العشرة التي ظلت صامتة لمدة ثمانية أشهر لأنها لم تفعّل أداة التتبع ولو لمرة واحدة. هذه الحسابات لا تظهر في القائمة المفرزة، وبالتالي لا تظهر في استنتاجاتك. إن عملية التدقيق الخاصة بك تحذف نتائجها حرفيًا. في مواقع العضوية، أو منصات التعلم الإلكتروني، أو شبكات المواقع المتعددة (multisite networks)، يعد هذا أمرًا مقلقًا بشكل خاص لأن الحسابات الخاملة غالبًا ما تكون هي الهدف الأول للمهاجمين.
البيانات موجودة فقط عندما تكون عديمة الفائدة
هناك مفارقة هادئة هنا؛ فجوهر WordPress يعرف شيئًا عن جلسات المستخدمين. عندما يقوم شخص ما بتسجيل الدخول، يقوم النظام بإنشاء رموز جلسة (session tokens) ويخزنها في بيانات المستخدم الوصفية. يمكن للمسؤول عرض الجلسات النشطة وإنهاؤها، ولكن هذه المعرفة حية تمامًا. في اللحظة التي ينقر فيها المستخدم على تسجيل الخروج، أو تنتهي صلاحية الجلسة من تلقاء نفسها، يقوم WordPress بحذف الرمز، فتتبخر السجلات.
يمكنك رؤية من هو متصل الآن، لكن لا يمكنك بسهولة معرفة من كان متصلًا بالأمس في الساعة العاشرة صباحًا. لقد تم بناء البنية التحتية لإدارة الجلسات في الوقت الفعلي، وليس للأغراض التاريخية
