اگر آپ کوئی "Last Login" پلگ ان انسٹال کرتے ہیں اور اچانک آپ کا WordPress Users اسکرین منظم نظر آنے لگتا ہے، تو یہ ترتیب آپ کو دھوکہ دے رہی ہے۔ تاریخیں مستند معلوم ہوتی ہیں۔ آپ انہیں ترتیب دے سکتے ہیں۔ وہ ٹھ固 حقائق کی طرح لگتی ہیں۔ لیکن وہ حقیقت نہیں ہیں۔ WordPress نے کبھی بھی اپنی اصل (native) لاگ ان کی تاریخ محفوظ نہیں کی، اور اس کالم میں موجود ہر ویلیو محض منتخب یادداشت کا ایک نتیجہ ہے۔
وہ تاریخ جو کبھی تھی ہی نہیں
WordPress اکاؤنٹس کو ایک سادہ سے users table میں رکھتا ہے۔ یہ نام، ای میلز، پاس ورڈ ہیشز، اور رجسٹریشن کی تاریخیں محفوظ کرتا ہے۔ لیکن اس میں کوئی ایسا فیلڈ موجود نہیں ہے جو یہ ریکارڈ کرے کہ کوئی شخص آخری بار کب لاگ ان (authenticate) ہوا تھا۔ یہ ہمیشہ سے ایسا ہی رہا ہے۔
جب آپ اس کمی کو پورا کرنے کے لیے کوئی پلگ ان انسٹال کرتے ہیں، تو وہ لاگ ان کے عمل کے ساتھ جڑ جاتا ہے اور user metadata میں ایک ٹائم اسٹیمپ (timestamp) لکھ دیتا ہے۔ پورا طریقہ کار یہی ہے۔ یہ آپ کے سرور لاگز (server logs) میں پیچھے جا کر معلومات نہیں نکالتا اور نہ ہی پرانے سیشنز کو دوبارہ ترتیب دیتا ہے۔ یہ صرف اس لمحے سے نگرانی شروع کرتا ہے جب آپ اسے ایکٹیویٹ کرتے ہیں۔
ایک ایسی سائٹ کا تصور کریں جو پانچ سال سے چل رہی ہو۔ اس دوران سینکڑوں ایڈیٹرز، سبسکرائبرز اور کنٹریکٹرز لاگ ان ہو چکے ہوں۔ آپ منگل کی دوپہر کو ایک ٹریکنگ پلگ ان انسٹال کرتے ہیں۔ بدھ کی صبح، ایک سینئر ایڈیٹر لاگ ان ہوتا ہے۔ پلگ ان وقت اور تاریخ ریکارڈ کر لیتا ہے۔ لیکن آپ کا اپنا ایڈمن اکاؤنٹ کچھ نہیں دکھاتا، کیونکہ آپ نے انسٹالیشن کے بعد سے لاگ ان نہیں کیا ہے۔ 2021 کا ایک پرانا فری لانسر اکاؤنٹ بھی کچھ نہیں دکھاتا۔ یہ کالم ایسا تاثر دیتا ہے جیسے آپ میں سے کسی نے بھی کبھی سائٹ کو استعمال نہیں کیا۔ حقیقت میں، ریکارڈنگ کا کوئی ماضی ہی نہیں تھا۔ یہ ڈیٹا کی عدم موجودگی کو عدم موجودگی کا ثبوت سمجھ لیتا ہے، جو کہ رسائی (access) کے انتظام کے دوران ایک خطرناک مفروضہ ہے۔
تین طریقے جن سے یہ کالم آپ کو گمراہ کرتا ہے
ایک بار جب پلگ ان چلنے لگتا ہے، تو دھوکہ گمشدہ تاریخ سے بدل کر غلط موجودہ رپورٹنگ کی شکل اختیار کر لیتا ہے۔ اس میں تین مخصوص جال ہیں۔
یہ صرف تصدیق (authentication) کو ٹریک کرتا ہے، سرگرمی (activity) کو نہیں
جب کوئی صارف WordPress لاگ ان اسکرین پر "Remember Me" کو منتخب کرتا ہے، تو براؤزر کو ایک authentication cookie موصول ہوتی ہے جو چودہ دن تک کارآمد رہ سکتی ہے۔ اس دوران، صارف پاس ورڈ دوبارہ ٹائپ کیے بغیر ڈیش بورڈ کھول سکتا ہے، پوسٹس شائع کر سکتا ہے، کمنٹس کو مانیٹر کر سکتا ہے، اور سیٹنگز اپ ڈیٹ کر سکتا ہے۔ ان کا سیشن زندہ اور فعال ہوتا ہے۔
تاہم، زیادہ تر last-login پلگ انز wp_login ایکشن کا انتظار کرتے ہیں۔ وہ ایکشن صرف اس وقت کام کرتا ہے جب فارم کے ذریعے معلومات (credentials) جمع کرائی جاتی ہیں، نہ کہ اس وقت جب کوئی موجودہ سیشن ریفریش ہوتا ہے۔ چنانچہ آپ کا ایڈیٹر پیر کی صبح لاگ ان ہو سکتا ہے، براؤزر سیشن کو برقرار رکھ سکتا ہے، اور مسلسل دو ہفتوں تک ایڈمن ایریا میں کام کر سکتا ہے۔ کالم پھر بھی چودہ دن پرانا ہی دکھائے گا۔ اس ٹائم اسٹیمپ پر مبنی سیکیورٹی ریویو اس اکاؤنٹ کو غیر فعال (dormant) قرار دے دے گا۔ لیکن یہ بالکل بھی غیر فعال نہیں ہے۔ آپ یہ دیکھ رہے ہیں کہ پاس ورڈ کب ٹائپ کیا گیا تھا، نہ کہ یہ کہ کوئی انسان آخری بار آپ کے سسٹم میں کب موجود تھا۔
یہ آڈٹ کے دوران غیر فعال اکاؤنٹس کو چھپا دیتا ہے
زیادہ تر پلگ انز users table کو usermeta table کے ساتھ جوڑ کر ترتیب دینے والا کالم بناتے ہیں۔ ساخت کے لحاظ سے یہ درست ہے، لیکن عملی طور پر یہ نظر آنے میں ایک خرابی (visibility bug) پیدا کرتا ہے۔
اگر کسی صارف نے پلگ ان ایکٹیویٹ کرنے کے بعد سے کبھی لاگ ان نہیں کیا، تو usermeta میں اس کی کوئی انٹری (row) موجود نہیں ہوتی۔ جب آپ اپنے پرانے ترین اکاؤنٹس تلاش کرنے کے لیے "Last Login" کے ذریعے صارف کی فہرست کو ترتیب دیتے ہیں، تو پس منظر میں چلنے والی کوئری (query) اکثر ان صارفین کو نکال دیتی ہے جن کے پاس metadata نہیں ہوتا۔ وہ ترتیب شدہ ویو سے مکمل طور سے غائب ہو جاتے ہیں۔
آپ صفائی کا آڈٹ (cleanup audit) کرتے ہیں۔ آپ ترتیب کو نیچے سے اوپر (descending) کرتے ہیں اور چالیس صارفین کو پرانی تاریخوں کے ساتھ دیکھتے ہیں۔ آپ اعتماد کے ساتھ ان کا ایک گروپ منتخب کرتے ہیں جنہیں غیر فعال کرنا ہے۔ لیکن آپ نے ان دس کنٹریکٹر اکاؤنٹس کو کبھی نہیں دیکھا جو آٹھ ماہ سے خاموش ہیں کیونکہ انہوں نے کبھی ٹریکر کو ٹرگر ہی نہیں کیا۔ وہ اکاؤنٹس ترتیب شدہ فہرست میں نظر نہیں آتے، اس لیے وہ آپ کے نتائج میں بھی شامل نہیں ہوتے۔ آپ کا آڈٹ لفظی طور پر اپنے ہی نتائج کو مٹا دیتا ہے۔ ممبرشپ سائٹس، ای لرننگ پلیٹ فارمز، یا ملٹی سائٹ نیٹ ورکس پر، یہ خاص طور پر پریشان کن ہے کیونکہ غیر فعال اکاؤنٹس اکثر وہ ہوتے ہیں جنہیں حملہ آور سب سے پہلے نشانہ بناتے ہیں۔
ڈیٹا صرف اس وقت موجود ہوتا ہے جب وہ بیکار ہو
یہاں ایک خاموش تضاد ہے۔ WordPress core کو صارف کے سیشنز کے بارے میں کچھ معلومات ہوتی ہیں۔ جب کوئی لاگ ان ہوتا ہے، تو سسٹم سیشن ٹوکنز (session tokens) تیار کرتا ہے اور انہیں user metadata میں محفوظ کرتا ہے۔ ایک ایڈمنسٹریٹر فعال سیشنز دیکھ سکتا ہے اور انہیں ختم کر سکتا ہے۔ لیکن یہ معلومات صرف لائیو (live) ہوتی ہیں۔ جیسے ہی صارف لاگ آؤٹ کرتا ہے، یا سیشن خود بخود ختم ہو جاتا ہے، WordPress اس ٹوکن کو حذف کر دیتا ہے۔ ریکارڈ غائب ہو جاتا ہے۔
آپ دیکھ سکتے ہیں کہ اس وقت کون آن لائن ہے۔ آپ آسانی سے یہ نہیں دیکھ سکتے کہ کل صبح دس بجے کون آن لائن تھا۔ یہ آرکیٹیکچر ریئل ٹائم سیشن مینجمنٹ کے لیے بنایا گیا تھا، نہ کہ تاریخی ریکارڈ کے لیے۔
