در حال بارگذاری...
بررسی زمان انقضای نشست و اطمینان از منقضی شدن نشست بعد از عدم فعالیت کاربر.
اهداف این درس
تست زمان انقضای نشست (Session Timeout Testing) شامل بررسی زمان انقضای نشست و اطمینان از منقضی شدن نشست بعد از عدم فعالیت کاربر یا زمان مطلق است.
زمانی که نشست بعد از عدم فعالیت کاربر منقضی میشود. مثلاً اگر کاربر ۳۰ دقیقه فعالیت نداشته باشد، نشست منقضی میشود.
زمانی که نشست بعد از مدت مشخصی صرفنظر از فعالیت کاربر منقضی میشود. مثلاً نشست بعد از ۸ ساعت منقضی میشود.
اگر نشست زمان انقضا نداشته باشد، مهاجم میتواند Session ID سرقتشده را برای همیشه استفاده کند. همچنین در رایانههای اشتراکی، کاربر بعدی ممکن است به حساب کاربر قبلی دسترسی داشته باشد.
1# ورود و دریافت Session ID2curl -v -c cookies.txt -d 'user=admin&pass=admin' https://target.com/login34# ذخیره Session ID5SESSION_ID=$(grep session cookies.txt | awk '{print $NF}')67# صبر کردن (مثلاً ۳۱ دقیقه)8sleep 1860910# تست دسترسی با Session ID قبلی11curl -v -b "session=$SESSION_ID" https://target.com/dashboardبررسی کنید آیا نشست بعد از زمان مطلق منقضی میشود:
بررسی کنید آیا پیام مناسبی به کاربر نمایش داده میشود:
| نوع برنامه | idle timeout | absolute timeout |
|---|---|---|
| بانکداری آنلاین | ۵-۱۰ دقیقه | ۳۰ دقیقه |
| ایمیل | ۳۰ دقیقه | ۸ ساعت |
| شبکه اجتماعی | ۳۰ دقیقه | ۲۴ ساعت |
| فروشگاه آنلاین | ۳۰ دقیقه | ۸ ساعت |
| پنل مدیریت | ۱۵ دقیقه | ۴ ساعت |
نشست بدون زمان انقضا میتواند منجر به تصاحب حساب کاربری، دسترسی غیرمجاز به اطلاعات حساس و نقض حریم خصوصی شود.
1const session = require('express-session');23app.use(session({4 secret: 'secret-key',5 cookie: {6 maxAge: 30 * 60 * 1000, // 30 دقیقه idle timeout7 secure: true,8 httpOnly: true,9 sameSite: 'strict'10 },11 rolling: true // تمدید زمان انقضا با هر درخواست12}));1314// بررسی absolute timeout15app.use((req, res, next) => {16 if (req.session.createdAt) {17 const absoluteTimeout = 8 * 60 * 60 * 1000; // 8 ساعت18 if (Date.now() - req.session.createdAt > absoluteTimeout) {19 req.session.destroy();20 return res.redirect('/login?expired=absolute');21 }22 } else {23 req.session.createdAt = Date.now();24 }25 next();26});توصیه عملی
از هر دو نوع timeout استفاده کنید: idle timeout برای عدم فعالیت و absolute timeout برای حداکثر زمان نشست.
نشست باید حداقل بعد از ۳۰ دقیقه عدم فعالیت منقضی شود.
نشست باید بعد از ۸ ساعت زمان مطلق منقضی شود.
زمان انقضا باید در سمت سرور بررسی شود.
نشست منقضیشده باید کاملاً معتبر زدایی شود.
idle timeout چیست؟
تفاوت idle timeout و absolute timeout چیست؟
Idle timeout زمانی است که نشست بعد از عدم فعالیت کاربر منقضی میشود (مثلاً ۳۰ دقیقه). Absolute timeout زمانی است که نشست بعد از مدت مشخصی صرفنظر از فعالیت منقضی میشود (مثلاً ۸ ساعت).
چرا نشست باید زمان انقضا داشته باشد؟
اگر نشست زمان انقضا نداشته باشد، مهاجم میتواند Session ID سرقتشده را برای همیشه استفاده کند. همچنین در رایانههای اشتراکی، کاربر بعدی ممکن است به حساب کاربر قبلی دسترسی داشته باشد.