یک ایدهء امنیتی برای logout

برای logout فرضا کاربر روی لینک logout.php کلیک میکنه و این صفحه هدرهایی رو به مرورگر کاربر میفرسته که باعث پاک شدن کوکی های احراز هویت سایت میشن.

من فکر کردم چطوره موقعی که کاربر روی گزینهء logout کلیک میکنه، درجا یک کد جاوااسکریپت رو هم اجرا کنیم که کوکی های احراز هویت رو دلیت میکنه و بعد وارد صفحهء logout.php میشه. اینطوری اگر جاوااسکریپت هم غیرفعال باشه بهرحال با ورود به صفحهء logout.php اگر کوکی های احراز هویت باقی مونده باشن پاک میشن.

اما چرا با جاوااسکریپت هم کوکی ها رو دلیت میکنیم؟

این کار یه مزایایی داره و از نظر امنیتی هم میتونه مفید باشه.
فرضا کاربر حتی وقتی آفلاین هست میتونه logout کنه.
یا کاربرانی که عجله میکنن و پیش از لود شدن کامل صفحهء logout.php مرورگر یا اتصال اینترنت رو میبندن و به این خاطر ممکنه هنوز صفحهء logout.php اجرا نشده یا مرورگر هدرهای پاک کنندهء کوکی ها رو دریافت نکرده باشه. یا حتی ممکنه مرورگر یا سیستم عامل کاربر در همون اثناء کرش کرده باشه.
یا مواقعی که در ارتباط با سایت به هر علتی از جمله مشکل اینترنت یا خود سایت/هاست اختلال یا مانع وجود داره، به این شکل بازهم کاربر بصورت امنی از سایت logout میشه، و اینکه اطمینان از خروج از سایت به حرفه ای بودن/آگاهی و دقت و احتیاط کاربر بستگی نداره یک مزیته.

البته یه مسئله ای که باید مد نظر داشت اینه که فرضا اگر کوکی سشن رو به این شکل قبل از اینکه صفحهء logout.php اجرا بشه دلیت کنیم، نمیشه فایل سشن کاربر در سمت سرور رو پاک کرد (با session_destroy) و اون فایل با محتویاتش روی سرور باقی میمونه تا سرانجام توسط سیستم رفتگر PHP پاک بشه.
بهتره فایل سشن، هم از نظر امنیتی و هم از نظر پرفورمنس و کاهش حجم و شلوغی فولدر محل ذخیرهء سشن ها در سمت سرور، همزمان با لاگ آوت کردن کاربر دلیت/پاک بشه.
راهی که برای این به نظرم میرسه اینه که، موقع لاگین کاربر، یک رشتهء رندوم در سشن کاربر درج کنیم و یک کوکی مستقل محتوی همین رشته رو هم در کلاینت ذخیره کنیم. موقع کلیک روی گزینهء logout ما کوکی سشن رو توسط جاوااسکریپت پاک نمیکنیم اما کوکی دیگر رو پاک میکنیم. در سمت سرور چک میکنیم اگر کوکی دوم ارسال نشده بود یا ارسال شده بود اما رشتهء موجود در اون با رشتهء رندوم ذخیره شده در سشن یکسان نبود، کاربر رو لاگین نمیکنیم و سشن کاربر رو هم destroy میکنیم.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>