PDA

View Full Version : یک ایدهء امنیتی برای logout



eshpilen
شنبه 22 بهمن 1390, 17:27 عصر
برای logout فرضا کاربر روی لینک logout.php کلیک میکنه و این صفحه هدرهایی رو به مرورگر کاربر میفرسته که باعث پاک شدن کوکی های احراز هویت سایت میشن.

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

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

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

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

idocsidocs
شنبه 22 بهمن 1390, 22:02 عصر
فرض کنید کوکی ها رو دلیت کردید و بعد از این کار، اتصال به اینترنت قطع شد یا به علت اخلال در سرور سسشن ها حذف نشدن.

بنظرم بهترین کار اینه که لاگ اوت رو به کمک ایجکس انجام بدیم تا چنین مشکلی پیش نیاد.

بالاخره اتفاقات سمت سرور اهمیت بیشتری دارن.

eshpilen
شنبه 22 بهمن 1390, 23:11 عصر
فرض کنید کوکی ها رو دلیت کردید و بعد از این کار، اتصال به اینترنت قطع شد یا به علت اخلال در سرور سسشن ها حذف نشدن.
خب؟ در این صورت چه مشکلی پیش میاد؟


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

idocsidocs
شنبه 22 بهمن 1390, 23:27 عصر
اولا ممکنه جاوااسکریپت غیرفعال باشه، دوما باید کاربر به صفحهء دیگری یا صفحهء اصلی سایت هدایت بشه تا تمام اطلاعات محرمانه که ممکنه در صفحهء قبلی با شرایط لاگین وجود داشتن جایگزین بشن.
اگر جاوا اسکریپت غیر فعال باشه، باز هم صفحه لاگ اوت اجرا می شه.
مگه توی روش خودتون نباید صفحه تغییر کنه؟