Session Hijacking چیست؟ چگونه از سرقت سشن و حساب کاربران جلوگیری کنیم؟
Session Hijacking یا ربایش سشن حملهای است که طی آن مهاجم Session معتبر کاربر را تصاحب میکند و ممکن است بدون دانستن رمز عبور به حساب او دسترسی پیدا کند. ضعفهایی مانند XSS، انتقال ناامن Cookie، Session Fixation، Token Leak و Sessionهای طولانی از مهمترین عوامل افزایش این خطر هستند. استفاده از HTTPS، Cookieهای Secure و HttpOnly، تنظیم SameSite، Session Rotation، Timeout، Reauthentication و Server-side Revocation از اصلیترین راهکارهای جلوگیری از Session Hijacking محسوب میشوند.
پاسخ کوتاه: Session Hijacking یا «ربایش سشن» حملهای است که در آن مهاجم به شناسه یا توکن معتبر Session یک کاربر دسترسی پیدا میکند و بدون نیاز به دانستن رمز عبور، خود را بهجای او به وبسایت معرفی میکند. استفاده سراسری از HTTPS، کوکیهای Secure و HttpOnly، تنظیم مناسب SameSite، کوتاهکردن عمر Session، تغییر Session ID پس از احراز هویت، جلوگیری از XSS، باطلکردن سشنهای قدیمی و Reauthentication برای عملیات حساس از مهمترین راهکارهای کاهش این خطر هستند.
امنیت حساب کاربری معمولاً با رمز عبور، احراز هویت دومرحلهای یا 2FA و محدودکردن تلاشهای ورود سنجیده میشود؛ اما یک مرحله مهم بعد از Login وجود دارد که اگر بهدرستی ایمن نشده باشد، حتی رمز عبور بسیار قوی نیز نمیتواند بهتنهایی از حساب محافظت کند. این مرحله مدیریت Session یا Session Management است.
بعد از ورود موفق کاربر، منطقی نیست که سایت برای مشاهده هر صفحه دوباره رمز عبور را درخواست کند. به همین دلیل وبسایت یک Session ایجاد میکند و مرورگر معمولاً یک شناسه یا توکن مرتبط با آن را در قالب Cookie نگه میدارد. این شناسه در درخواستهای بعدی به سرور اعلام میکند که درخواست متعلق به یک کاربر احراز هویتشده است.
مشکل از جایی آغاز میشود که این Session ID یا Session Token به دست شخص دیگری برسد.
در بسیاری از معماریها، کسی که Session معتبر را در اختیار دارد میتواند تا زمان پایان اعتبار آن، همان سطح دسترسی صاحب اصلی حساب را دریافت کند. بنابراین مهاجم ممکن است اصلاً نیازی به شکستن Password، عبور از فرم Login یا حتی دریافت کد 2FA نداشته باشد.
به همین دلیل Session Hijacking یکی از موضوعات مهم در امنیت برنامههای وب، فروشگاههای اینترنتی، سامانههای مدیریتی و سایتهای WordPress است.
در این مقاله از رخنهکاو بررسی میکنیم Session Hijacking چیست، Session چگونه کار میکند، مهاجم از چه ضعفهایی برای سرقت سشن استفاده میکند، تفاوت Session Hijacking با Session Fixation چیست و مدیران سایت و توسعهدهندگان چگونه میتوانند احتمال تصاحب حساب کاربران را تا حد زیادی کاهش دهند. 
Session چیست و چرا وبسایت به آن نیاز دارد؟
HTTP ذاتاً Stateless است؛ یعنی هر Request در حالت پایه مستقل از درخواست قبلی در نظر گرفته میشود. سرور صرفاً با دریافت یک درخواست جدید لزوماً نمیداند این همان کاربری است که چند ثانیه قبل Login کرده است.
وباپلیکیشنها برای حل این مسئله از Session Management استفاده میکنند.
OWASP توضیح میدهد که Session Management ارتباط میان سه بخش بسیار مهم را برقرار میکند:
- Authentication یا احراز هویت
- Session Management یا مدیریت نشست
- Authorization یا کنترل سطح دسترسی
پس از احراز هویت موفق، برنامه یک Session برای کاربر ایجاد میکند. مرورگر معمولاً یک Session Identifier دریافت میکند و در Requestهای بعدی آن را برای سرور ارسال میکند. سرور با بررسی این شناسه میتواند تشخیص دهد درخواست به کدام Session احراز هویتشده تعلق دارد.
یک مثال ساده از Session
فرض کنید کاربری وارد فروشگاه اینترنتی شده است.
فرآیند سادهشده ممکن است به شکل زیر باشد:
- کاربر Username و Password را وارد میکند.
- سرور اطلاعات ورود را اعتبارسنجی میکند.
- در صورت موفقیت، یک Session ایجاد میشود.
- یک شناسه مرتبط با Session به مرورگر داده میشود.
- مرورگر این شناسه را معمولاً در Cookie ذخیره میکند.
- هنگام مراجعه به صفحه حساب کاربری، Cookie همراه Request ارسال میشود.
- سرور Session را بررسی میکند.
- اگر Session معتبر باشد، حساب کاربری نمایش داده میشود.
در چنین ساختاری رمز عبور در هر Request ارسال نمیشود. Session ID در عمل نقش یک مدرک موقت برای اثبات تداوم نشست احراز هویتشده را دارد.
NIST نیز Session را به یک Secret یا راز Session متصل میداند که نرمافزار کاربر و سرویس از طریق آن ارتباط نشست احراز هویتشده را حفظ میکنند.
Session Hijacking چیست؟
Session Hijacking یا ربایش سشن حالتی است که مهاجم بتواند کنترل یک Session معتبر متعلق به کاربر دیگر را به دست آورد و از آن برای جعل هویت کاربر استفاده کند.
OWASP اشاره میکند که افشا، ضبط، پیشبینی، Brute Force یا Fix شدن Session ID میتواند به Session Hijacking منجر شود. در صورت موفقیت، مهاجم ممکن است بتواند در برنامه وب دقیقاً مانند قربانی عمل کند.
به زبان ساده:
در سرقت رمز عبور، مهاجم تلاش میکند فرآیند Login را شکست دهد؛ اما در Session Hijacking هدف او میتواند تصاحب نتیجه یک Login موفق باشد.
همین تفاوت باعث میشود Session Hijacking از نظر امنیت حساب بسیار جدی باشد.
فرض کنید کاربر با این موارد وارد حساب شده باشد:
- Password بسیار قوی
- 2FA
- CAPTCHA
- محدودیت Login Attempt
- Passkey
اگر مهاجم پس از تکمیل تمام این مراحل بتواند یک Session معتبر قابلاستفاده را به سرقت ببرد، ممکن است دیگر نیازی به تکرار مراحل Login نداشته باشد.
البته میزان موفقیت این حمله به طراحی برنامه، نحوه Bind شدن Session، مدت اعتبار آن، Reauthentication و کنترلهای امنیتی دیگر وابسته است.
چرا سرقت Session میتواند به تصاحب حساب منجر شود؟
Session Token در بسیاری از برنامهها مانند یک Bearer Token عمل میکند؛ یعنی هر موجودیتی که توکن معتبر را ارائه کند ممکن است صاحب Session فرض شود.
در نتیجه اگر سرور صرفاً بپرسد:
«آیا این Session Token معتبر است؟»
و هیچ کنترل دیگری وجود نداشته باشد، مهاجم میتواند با در اختیار داشتن توکن معتبر نقش کاربر را تقلید کند.
این خطر برای حسابهای زیر جدیتر است:
- Administrator
- مدیر فروشگاه WooCommerce
- مدیر محتوا
- حساب پشتیبانی
- کاربران دارای اطلاعات شخصی
- حسابهای مالی
- داشبوردهای SaaS
- سامانههای سازمانی
- پنل مدیریت Hosting
- حسابهایی که قابلیت تغییر Email یا Password دارند
هرچه سطح دسترسی Session بیشتر باشد، ارزش آن برای مهاجم نیز بیشتر میشود.
Session ID دقیقاً چیست؟
Session ID شناسهای است که به یک Session مشخص اشاره میکند.
یک Session ID امن باید حدسزدن آن برای مهاجم عملاً غیرممکن باشد. OWASP توصیه میکند Session Identifierها از منابع تصادفی امن تولید شوند و ساختار قابل پیشبینی نداشته باشند.
NIST نیز تأکید میکند Session Secret باید با Random Bit Generator مناسب تولید شود و نباید از طریق کانال ناامن منتقل شود.
Session ID نباید شامل اطلاعات واضح و قابل استنتاج مانند موارد زیر باشد:
- User ID
- Username
- Timestamp قابل پیشبینی
- Role
- شماره مشتری
- اطلاعات شخصی
بهتر است Session ID برای Client یک مقدار Opaque باشد؛ یعنی کاربر یا مهاجم نتواند از ساختار آن اطلاعات مفیدی استخراج کند. 
Session Hijacking چگونه اتفاق میافتد؟
برای جلوگیری از Session Hijacking ابتدا باید مسیرهای احتمالی افشای Session را شناخت.
هدف این بخش آموزش سوءاستفاده نیست؛ بلکه بررسی نقاط ضعف معماری است تا مدیر سایت بتواند آنها را برطرف کند.
1. سرقت Cookie از طریق XSS
Cross-Site Scripting یا XSS یکی از مهمترین تهدیدهای مرتبط با Session محسوب میشود.
اگر برنامه اجازه اجرای JavaScript غیرمجاز در Origin سایت را بدهد و Session Cookie نیز برای JavaScript قابل خواندن باشد، ممکن است محرمانگی Cookie از بین برود.
اینجاست که Attribute مهم HttpOnly وارد میشود.
Cookie دارای HttpOnly برای JavaScript معمولی از طریق document.cookie قابل خواندن نیست.
OWASP استفاده از HttpOnly را برای محافظت از محرمانگی Session Cookie در برابر سرقت مستقیم Cookie از طریق XSS توصیه میکند.
اما یک سوءبرداشت مهم وجود دارد:
HttpOnly درمان XSS نیست.
اگر XSS در سایت وجود داشته باشد، حتی زمانی که JavaScript نتواند Cookie را مستقیماً بخواند، ممکن است بتواند در Context مرورگر قربانی درخواستهای مخربی ارسال کند.
بنابراین دو کنترل مستقل لازم است:
- جلوگیری از XSS
- محافظت از Session Cookie با HttpOnly
2. انتقال Session روی HTTP ناامن
اگر Session Cookie از طریق HTTP بدون Encryption منتقل شود، اطلاعات Session ممکن است در شبکه افشا شوند.
به همین دلیل استفاده از HTTPS تنها برای صفحه Login کافی نیست.
کل Session باید تحت HTTPS باشد.
OWASP تأکید میکند ارتباط HTTPS/TLS باید برای تمام Web Session استفاده شود و Session پس از Login نباید دوباره وارد ارتباط HTTP ناامن شود.
Cookie مرتبط با Session نیز باید دارای Attribute زیر باشد:
Secure
Secure به مرورگر اعلام میکند Cookie را تنها روی اتصال HTTPS ارسال کند.
MDN نیز Secure را برای محدودکردن ارسال Cookie به HTTPS تعریف میکند.
3. آسیبپذیری Session Fixation
Session Fixation با Session Hijacking مرتبط است اما دقیقاً یکسان نیست.
در Session Hijacking معمولاً مهاجم تلاش میکند Session معتبر قربانی را به دست آورد.
در Session Fixation مسئله این است که قربانی با Session Identifier مشخصی که مهاجم از قبل میشناسد وارد حساب شود و برنامه پس از Login همان Session را معتبر نگه دارد.
راهکار مهم مقابله با این مشکل Regenerate کردن Session Identifier پس از Authentication و تغییر سطح دسترسی است.
یعنی:
قبل از Login:
Session A
بعد از Login موفق:
Session B
Session قبلی باید دیگر برای Authentication معتبر نباشد.
این طراحی باعث میشود دانستن Session قبل از Login بهتنهایی برای دسترسی به Session احراز هویتشده کافی نباشد.
4. بدافزار یا افزونه مرورگر مخرب
همه حملات Session از خود وبسایت آغاز نمیشوند.
اگر سیستم کاربر آلوده باشد، Malware یا Browser Extension مخرب ممکن است دادههای مرورگر را هدف قرار دهد.
این مسئله نشان میدهد امنیت Session فقط مسئله Server-Side نیست.
به همین دلیل حسابهای حساس بهتر است از کنترلهای مکمل استفاده کنند:
- Session Lifetime کوتاهتر
- Reauthentication
- MFA
- تشخیص Login و Session مشکوک
- مدیریت دستگاههای فعال
- امکان Logout همه Sessionها
5. افشای Session از طریق URL
قرار دادن Session Identifier در URL طراحی مناسبی نیست.
URL ممکن است در مکانهای متعددی ذخیره یا منتقل شود، از جمله:
- Browser History
- Log سرور
- Analytics
- Proxy Log
- Screenshot
- Bookmark
- Referrer در برخی سناریوها
بنابراین Session Identifierهای وب معمولاً باید با Cookie امن مدیریت شوند و نه URL Parameter.
6. نشت Session از Logها و ابزارهای مانیتورینگ
گاهی مشکل از یک آسیبپذیری پیچیده نیست؛ بلکه Application خودش Token را Log میکند.
برای مثال موارد زیر نباید بدون ضرورت در Log ذخیره شوند:
- Session ID
- Authentication Token
- Authorization Header کامل
- Reset Token
- Refresh Token
- Cookie Header
سیستم Log باید بهگونهای طراحی شود که Secretها Redact یا Mask شوند.
وجود HTTPS مانع نشت Token از Log خود Application نمیشود.
7. دامنه Cookie بیش از حد گسترده
Cookieها میتوانند با Attributeهایی مانند Domain و Path محدود شوند.
اگر Cookie برای دامنهای گستردهتر از نیاز تعریف شود، Subdomainهای بیشتری در محدوده آن قرار میگیرند.
MDN توصیه میکند Domain و Path تا حد امکان محدود انتخاب شوند. همچنین Cookieهایی که بدون نیاز روی تمام Subdomainها قابل استفاده هستند، سطح حمله بزرگتری ایجاد میکنند.
برای نمونه، اگر Session فقط برای:
account.example.com
لازم است، باید بررسی کرد آیا واقعاً ضرورتی دارد روی تمام:
*.example.com
قابل استفاده باشد یا خیر. 
تفاوت Session Hijacking و Session Fixation چیست؟
این دو اصطلاح گاهی بهجای یکدیگر استفاده میشوند اما تفاوت مهمی دارند.
| ویژگی | Session Hijacking | Session Fixation |
|---|---|---|
| هدف | تصاحب Session معتبر قربانی | وادارکردن قربانی به استفاده از Session شناختهشده |
| زمان معمول | اغلب پس از Authentication | معمولاً از قبل یا هنگام Authentication |
| مشکل اصلی | افشا یا سرقت Session | عدم تغییر Session ID پس از Login |
| کنترل کلیدی | حفاظت از Token و Session | Regenerate کردن Session پس از Login |
| نتیجه احتمالی | جعل هویت کاربر | دسترسی به Session احراز هویتشده |
Session Fixation را میتوان یکی از مسیرهایی دانست که در نهایت ممکن است به Hijacking Session منتهی شود.
آیا 2FA جلوی Session Hijacking را میگیرد؟
نه بهتنهایی.
2FA یکی از مهمترین کنترلها برای جلوگیری از تصاحب حساب از طریق Credential Theft، Password Guessing و بسیاری از حملات Login است، اما Session Hijacking معمولاً بعد از احراز هویت اتفاق میافتد.
تصور کنید:
- کاربر Password را وارد کرده است.
- کد 2FA را تأیید کرده است.
- Session معتبر ساخته شده است.
- مهاجم Session را به دست میآورد.
در این شرایط، اگر سایت برای ادامه Session دوباره MFA نخواهد، داشتن 2FA لزوماً مانع استفاده مهاجم از Session موجود نمیشود.
با این حال 2FA همچنان بسیار مهم است.
راهکار حرفهایتر استفاده از Reauthentication یا Step-Up Authentication برای عملیات حساس است.
برای مثال قبل از:
- تغییر Password
- تغییر Email
- غیرفعالکردن 2FA
- اضافهکردن Administrator
- ثبت برداشت
- تغییر اطلاعات پرداخت
- مشاهده Recovery Code
- تغییر API Key
میتوان از کاربر احراز هویت مجدد خواست.
NIST نیز Reauthentication دورهای را بخشی از Session Management امن میداند. 
مهمترین تنظیمات یک Session Cookie امن
یکی از اصلیترین لایههای دفاع، تنظیم درست Cookie است.
یک Session Cookie معمولاً باید بر اساس نیاز برنامه Attributeهای مناسبی داشته باشد.
Secure
Secure باعث میشود Cookie تنها از طریق HTTPS ارسال شود.
این ویژگی خطر ارسال ناخواسته Session روی HTTP را کاهش میدهد.
HttpOnly
HttpOnly دسترسی JavaScript به Cookie را محدود میکند.
این ویژگی بهویژه برای کاهش احتمال سرقت مستقیم Session Cookie در برخی سناریوهای XSS مهم است.
اما دوباره باید تأکید کرد:
HttpOnly جایگزین جلوگیری از XSS نیست.
SameSite
SameSite تعیین میکند Browser در Requestهای Cross-Site چه زمانی Cookie را ارسال کند.
مقادیر شناختهشده آن عبارتاند از:
- Strict
- Lax
- None
SameSite=Strict محدودترین رفتار را ایجاد میکند.
SameSite=Lax در بسیاری از کاربردهای معمول تعادل مناسبی بین Security و Compatibility فراهم میکند.
SameSite=None برای مواردی استفاده میشود که Cookie واقعاً باید در Contextهای Cross-Site ارسال شود و طبق رفتار مرورگرهای مدرن باید همراه Secure باشد.
نکته مهم:
SameSite در درجه اول کنترل مهمی در برابر برخی حملات Cross-Site مانند CSRF است؛ بنابراین نباید آن را یک مکانیزم مستقل برای جلوگیری از تمام انواع Session Hijacking دانست.
Domain
Domain باید تا حد امکان محدود باشد.
تعریف Cookie روی یک Parent Domain بدون نیاز واقعی ممکن است محدوده دسترسی Cookie را به Subdomainهای دیگر افزایش دهد.
Path
Path نیز باید متناسب با معماری Application تعیین شود.
با این حال MDN تأکید میکند Path را نباید بهعنوان یک مرز امنیتی کامل در نظر گرفت.
Expires و Max-Age
Session نباید بدون دلیل ماهها یا سالها معتبر باقی بماند.
هرچه Session طولانیتر باشد، پنجره زمانی سوءاستفاده از Token دزدیدهشده نیز بزرگتر میشود.
برای برنامههای حساس بهتر است مدت Session بر اساس Risk تعیین شود.
Cookie Prefix چیست و چه کمکی میکند؟
مرورگرهای مدرن از Prefixهایی برای Cookie پشتیبانی میکنند که میتوانند محدودیتهای امنیتی بیشتری اعمال کنند.
یکی از مهمترین نمونهها:
__Host-
NIST توصیه میکند Cookieهای Session در شرایط مناسب از Prefix __Host- و Path=/ استفاده کنند.
استفاده صحیح از Cookie Prefix میتواند Defense in Depth ایجاد کند و برخی اشتباهات Configuration را کاهش دهد.
البته Browser Compatibility و نیازهای Application نیز باید بررسی شوند.
چرا HTTPS برای جلوگیری از Session Hijacking ضروری است؟
HTTPS تنها برای مخفیکردن Password نیست.
بعد از Login، Cookie یا Session Token بارها بین Browser و Server جابهجا میشود. اگر ارتباطی در Session به HTTP Downgrade شود، ممکن است Secret در معرض خطر قرار گیرد.
بنابراین سیاست مناسب باید این باشد:
HTTP → Redirect به HTTPS
و پس از آن:
تمام Session روی HTTPS
همراه با:
- TLS معتبر
- Secure Cookie
- HSTS در صورت Configuration صحیح
- عدم Mixed Content امنیتی
- عدم وجود Endpoint احراز هویتشده روی HTTP
OWASP بهطور مشخص توصیه میکند HTTPS در کل Session استفاده شود، نه فقط صفحه ورود.
HSTS چه نقشی دارد؟
HTTP Strict Transport Security یا HSTS به مرورگر اعلام میکند سایت باید تنها از طریق HTTPS بارگذاری شود.
این Header میتواند بخشی از دفاع در برابر Downgradeهای ناخواسته باشد.
اما فعالسازی HSTS باید آگاهانه انجام شود، بهخصوص در سایتهایی که Subdomainهای متعدد دارند.
تنظیم اشتباه گزینههایی مانند:
includeSubDomains
ممکن است روی Subdomainهایی که هنوز HTTPS مناسب ندارند اثر بگذارد.
بنابراین HSTS باید پس از اطمینان از آمادهبودن زیرساخت TLS فعال شود.
Session ID پس از Login باید تغییر کند
یکی از کنترلهای حیاتی Session Management این است که پس از تغییر سطح Privilege، Session Identifier جدید ایجاد شود.
مهمترین نقطه:
Authentication موفق
اما این سیاست میتواند برای تغییرات مهم دیگر نیز کاربرد داشته باشد:
- Login
- فعالشدن MFA
- تبدیل User به Administrator
- ورود به بخش حساس
- Account Recovery
- تغییر نقش کاربر
هدف این است که Session ناشناس قبلی نتواند همان شناسه Session احراز هویتشده را حفظ کند.
این کنترل نقش مهمی در جلوگیری از Session Fixation دارد.
Idle Timeout چیست؟
Idle Timeout مدت زمانی است که Session پس از عدم فعالیت کاربر معتبر میماند.
برای مثال، فرض کنید یک پنل مالی پس از مدت مشخصی بیفعالیتی Session را منقضی کند.
این کار باعث میشود اگر کاربر سیستم را بدون Lock رها کند یا Session در معرض خطر قرار گیرد، فرصت استفاده نامحدود ایجاد نشود.
NIST میان دو نوع Timeout تمایز قائل میشود:
Inactivity Timeout
مدت مجاز عدم فعالیت کاربر.
Overall Timeout
حداکثر عمر Session، حتی اگر کاربر همچنان فعال باشد.
زمانی که Timeout موردنظر تمام شود، Session باید Terminate شود و در شرایط مناسب Reauthentication انجام شود.
چرا فقط تاریخ انقضای Cookie کافی نیست؟
این نکته بسیار مهم است.
فرض کنید Cookie قرار است یک ساعت دیگر منقضی شود.
اگر Server-Side Session همچنان بدون محدودیت معتبر باشد یا Token در جای دیگری دوباره استفاده شود، صرفاً حذف Cookie از Browser نمیتواند تضمین کند Session واقعاً باطل شده است.
بنابراین باید بین دو مفهوم تفاوت گذاشت:
Client-side expiration
و
Server-side invalidation
Session Management حرفهای باید اعتبار Session را در سمت Server نیز کنترل کند.
Logout واقعی چگونه باید کار کند؟
Logout امن فقط پاککردن Cookie در Browser نیست.
Server باید Session یا Token مرتبط را نیز Invalid کند.
در غیر این صورت، اگر نسخه دیگری از Token قبلاً در اختیار مهاجم قرار گرفته باشد، ممکن است همچنان قابل استفاده باشد.
فرآیند منطقی Logout:
- دریافت درخواست Logout
- شناسایی Session فعلی
- Invalid کردن Session در Server
- پاککردن Cookie
- پایان دسترسی Session
- Redirect به صفحه عمومی یا Login
برای سیستمهای حساس بهتر است گزینهای مانند:
Logout from all devices
نیز در اختیار کاربر قرار گیرد.
Session Rotation چیست؟
Session Rotation یعنی Session Identifier در زمانهای مشخص یا پس از رویدادهای امنیتی تغییر کند.
Rotation میتواند در رویدادهایی مثل این انجام شود:
- Login
- Reauthentication
- تغییر Privilege
- تغییر Password
- تغییر Email
- Recovery
- رفتار مشکوک
اما Rotation باید با دقت طراحی شود تا Sessionهای قدیمی واقعاً Invalid شوند.
صرف ساخت Token جدید بدون باطلکردن Token قبلی، دفاع کاملی ایجاد نمیکند.
آیا Session باید به IP Address متصل شود؟
این سؤال پاسخ ساده «بله» یا «خیر» ندارد.
Bind کامل Session به IP ممکن است امنیت بیشتری به نظر برسد، اما در دنیای واقعی IP کاربران میتواند تغییر کند.
نمونهها:
- اینترنت موبایل
- شبکههای Carrier-Grade NAT
- تغییر Wi-Fi
- VPN
- شبکه سازمانی
- Proxy
- IPv6 Privacy Address
اگر هر تغییر IP باعث Logout شود، تجربه کاربری میتواند بسیار ضعیف شود.
راهکار بهتر در بسیاری از سیستمها استفاده از IP بهعنوان Risk Signal است، نه الزاماً Identity قطعی.
برای مثال:
تغییر جزئی IP → ثبت رویداد
تغییر کشور + Browser جدید + عملیات حساس → Reauthentication
NIST نیز IP Address، Geolocation، Device Characteristics، Timing و Usage Pattern را از سیگنالهایی میداند که میتوانند در Session Monitoring بررسی شوند، البته با درنظرگرفتن پیامدهای Privacy.
Session Monitoring چیست؟
Session Monitoring یا Continuous Session Evaluation یعنی برنامه فقط در لحظه Login تصمیم امنیتی نگیرد.
رفتار Session در طول عمر آن نیز بررسی شود.
سیگنالهای احتمالی عبارتاند از:
- IP
- Country
- Device
- Browser
- User-Agent
- زمان درخواستها
- سرعت تغییر موقعیت
- الگوی عملیات
- تعداد عملیات حساس
- تغییر ناگهانی رفتار حساب
برای مثال:
کاربر چند دقیقه قبل از یک کشور فعالیت داشته و بلافاصله Session مشابهی از منطقهای کاملاً متفاوت عملیات بسیار حساس انجام میدهد.
این اتفاق لزوماً حمله نیست، اما میتواند Risk Score را بالا ببرد و باعث شود سیستم:
- Reauthentication درخواست کند
- Session را محدود کند
- هشدار ارسال کند
- عملیات حساس را موقتاً متوقف کند
جلوگیری از XSS بخش مهم دفاع در برابر Session Hijacking است
از آنجا که XSS یکی از مسیرهای مهم سوءاستفاده از Context مرورگر کاربر است، امنیت Session بدون کنترل XSS کامل نیست.
مهمترین اقدامات دفاعی عبارتاند از:
- Output Encoding
- Context-aware Escaping
- Sanitization ورودیهای HTML مجاز
- اجتناب از APIهای ناامن DOM
- Content Security Policy
- بروزرسانی Libraryها
- حذف Scriptهای Third-Party غیرضروری
- اعتبارسنجی داده
- استفاده صحیح از Frameworkهای مدرن
در WordPress نیز توسعهدهنده باید به توابع استاندارد Escaping و Sanitization توجه ویژه داشته باشد.
آیا CSP میتواند Session Hijacking را متوقف کند؟
Content Security Policy یا CSP میتواند تأثیر برخی حملات XSS را کاهش دهد، اما بهتنهایی تضمین نمیکند Session Hijacking غیرممکن شود.
CSP باید بهعنوان یک Defense in Depth در کنار این موارد استفاده شود:
- Output Encoding
- Sanitization
- HttpOnly
- Secure
- SameSite
- HTTPS
- Session Rotation
سیاست ضعیفی مانند اجازه گسترده به Scriptهای ناامن ممکن است اثر حفاظتی CSP را بهشدت کاهش دهد.
CSRF چه ارتباطی با Session دارد؟
در CSRF مهاجم الزاماً Cookie را نمیدزدد.
در عوض تلاش میکند Browser قربانی را وادار کند یک Request ناخواسته را همراه Credential موجود ارسال کند.
از آنجا که مرورگر Cookieهای Authentication را خودکار همراه برخی Requestها ارسال میکند، Session میتواند در حمله CSRF مورد سوءاستفاده قرار گیرد.
راهکارها شامل:
- CSRF Token
- SameSite Cookie
- بررسی Origin/Referer در شرایط مناسب
- Reauthentication برای عملیات حساس
هستند.
بنابراین CSRF و Session Hijacking یک حمله نیستند، اما هر دو به امنیت Session مرتبطاند.
چرا Session Token نباید در LocalStorage ذخیره شود؟
این موضوع به معماری Application وابسته است؛ با این حال قرار دادن Secretهای Session در Storageهایی که مستقیماً توسط JavaScript قابل دسترسی هستند، ریسک XSS را افزایش میدهد.
NIST توصیه میکند Session Secretها در مکانهای ناامنی مانند HTML5 Local Storage قرار نگیرند، زیرا XSS میتواند آنها را در معرض افشا قرار دهد.
در برنامههای Browser-Based که معماری اجازه میدهد، Cookie امن با:
- HttpOnly
- Secure
- SameSite مناسب
معمولاً گزینه مهمی برای نگهداری Session Credential است.
البته معماری OAuth، SPA و Token-Based Authentication جزئیات خاص خود را دارد و نباید همه سیستمها را با یک الگوی ثابت پیادهسازی کرد.
تفاوت Access Token و Session Cookie چیست؟
این دو مفهوم ممکن است نقش مشابهی در Authentication State داشته باشند، اما یکی نیستند.
Session Cookie اغلب برای حفظ Login Session مرورگر استفاده میشود.
Access Token معمولاً اجازه دسترسی به Resource یا API مشخصی را میدهد.
در معماری OAuth ممکن است موارد زیر وجود داشته باشند:
- Access Token
- Refresh Token
- Authorization Session
- Identity Token
هرکدام Lifetime و Security Model مخصوص خود را دارند.
نباید Access Token طولانیعمر را بدون تحلیل خطر مانند Session Cookie ساده مدیریت کرد.
Refresh Token چرا حساستر است؟
Access Token ممکن است کوتاهعمر باشد، اما Refresh Token میتواند برای دریافت Access Token جدید استفاده شود.
بنابراین در صورت افشای Refresh Token، خطر ممکن است مدت بیشتری باقی بماند.
در طراحی Token-Based باید به این موارد توجه شود:
- Rotation
- Revocation
- Expiration
- Secure Storage
- Replay Detection
- Scope
- Audience
- Token Binding در معماریهای پشتیبانیشده
Reauthentication برای عملیات حساس
یکی از مؤثرترین کنترلها در برابر سوءاستفاده از Session سرقتشده این است که هر Session معتبر را برای همیشه معادل «اعتماد کامل» در نظر نگیریم.
مثلاً کاربری که یک ساعت قبل Login کرده است و اکنون میخواهد 2FA را غیرفعال کند، بهتر است دوباره هویت خود را تأیید کند.
عملیات مناسب برای Reauthentication:
- تغییر Password
- تغییر Email اصلی
- حذف MFA
- مشاهده Backup Code
- ساخت API Token
- تغییر اطلاعات بانکی
- برداشت مالی
- حذف حساب
- تغییر Role
- اضافهکردن Administrator
- تغییر تنظیمات امنیتی
این رویکرد میزان خسارت Session Hijacking را به شکل قابلتوجهی کاهش میدهد. 
حفاظت از Session در WordPress
WordPress برای Authentication از Cookie استفاده میکند.
مستندات رسمی WordPress توضیح میدهد که Cookieهایی مانند:
wordpress_[hash]
و
wordpress_logged_in_[hash]
در فرآیند Authentication و تشخیص کاربر Loginشده نقش دارند.
بنابراین امنیت Cookieهای Authentication برای سایت WordPress اهمیت بالایی دارد.
استفاده اجباری از HTTPS در WordPress
بخش مدیریت و Login باید روی HTTPS ارائه شوند.
یکی از Configurationهای شناختهشده WordPress:
FORCE_SSL_ADMIN
است.
مستندات رسمی WordPress توضیح میدهد این گزینه برای اجبار SSL در Login و Admin استفاده میشود تا Password و Cookieهای مدیریتی روی ارتباط ناامن ارسال نشوند.
البته بهترین معماری معمولاً HTTPS سراسری برای کل سایت است، نه فقط wp-admin.
Sessionهای WordPress چه مدت معتبرند؟
طبق مستندات WordPress، Authentication Cookie در حالت عادی مدت محدود دارد و گزینه Remember Me میتواند مدت Login را افزایش دهد.
برای حساب Administrator باید بررسی کرد آیا واقعاً Session بسیار طولانی لازم است یا خیر.
افزایش بیدلیل Login Lifetime میتواند پنجره سوءاستفاده از Session سرقتشده را بیشتر کند.
Logout از Sessionهای دیگر در WordPress
WordPress مکانیزم Session Token Management دارد.
توابعی مانند:
wp_destroy_other_sessions()
و
wp_destroy_all_sessions()
برای Invalid کردن Session Tokenهای دیگر یا همه Sessionهای کاربر در Core وجود دارند.
این قابلیت از نظر Incident Response مهم است.
اگر احتمال تصاحب Account وجود دارد، Invalid کردن Sessionهای قبلی میتواند بسیار مهمتر از صرفاً Logout کردن Browser فعلی باشد.
تغییر Password در WordPress چه اثری روی Session دارد؟
Authentication Cookieهای WordPress به وضعیت Credential کاربر وابستهاند و تغییر Password میتواند Cookieهای قبلی را بیاعتبار کند.
به همین دلیل، هنگام پاسخ به Incident احتمالی بهتر است فقط به «Logout» اکتفا نشود و بسته به شرایط اقداماتی مانند:
- تغییر Password
- بررسی کاربران Administrator
- Invalid کردن Sessionها
- بررسی Plugin و Theme
- بررسی Log
- فعالسازی 2FA
انجام شود.
آیا WordPress Nonce جلوی Session Hijacking را میگیرد؟
خیر.
Nonce در WordPress عمدتاً برای جلوگیری از Requestهای ناخواسته و برخی سناریوهای CSRF طراحی شده است و نباید آن را جایگزین Authentication یا Session Security دانست.
اگر مهاجم Session کاربر را واقعاً تصاحب کرده باشد، وجود Nonce بهتنهایی الزاماً مشکل را حل نمیکند.
به همین دلیل امنیت باید لایهای باشد.
WooCommerce و اهمیت امنیت Session
در WooCommerce سطح حساسیت Session میتواند بیشتر باشد، زیرا حساب ممکن است به موارد زیر دسترسی داشته باشد:
- سفارشها
- نام و آدرس
- شماره تماس
- تاریخچه خرید
- اطلاعات صورتحساب
- Downloadهای خصوصی
- امکانات مدیریتی فروشگاه
اگر حساب Manager یا Administrator تصاحب شود، ریسک بسیار بزرگتر خواهد بود.
برای WooCommerce توصیه میشود:
- HTTPS اجباری باشد.
- Administratorها از 2FA استفاده کنند.
- Session Administrator کوتاهتر باشد.
- Pluginهای ناشناس حذف شوند.
- XSS و CSRF جدی گرفته شوند.
- عملیات حساس Reauthentication داشته باشند.
- تغییرات مدیریتی Log شوند.
- Sessionهای مشکوک قابل Invalid کردن باشند.
نقش WAF در جلوگیری از Session Hijacking
Web Application Firewall یا WAF میتواند بخشی از دفاع باشد، ولی WAF مشکل Session Management ضعیف را اصلاح نمیکند.
WAF ممکن است بتواند:
- بخشی از Payloadهای XSS شناختهشده را مسدود کند.
- Requestهای مشکوک را Rate Limit کند.
- Botها را محدود کند.
- برخی الگوهای حمله را تشخیص دهد.
اما اگر Application:
- Cookie ناامن داشته باشد،
- Session را بیش از حد طولانی نگه دارد،
- Token را Log کند،
- Session را بعد از Logout Invalid نکند،
WAF بهتنهایی قادر به اصلاح این طراحی نیست.
بنابراین WAF باید Defense in Depth باشد، نه جایگزین Secure Coding.
آیا تغییر User-Agent میتواند Session Hijacking را تشخیص دهد؟
User-Agent میتواند یک Signal باشد، ولی قابل اتکای مطلق نیست.
User-Agent:
- قابل Spoof شدن است.
- ممکن است با Update مرورگر تغییر کند.
- همیشه Device را دقیق مشخص نمیکند.
بهتر است Detection بر مجموعهای از سیگنالها بنا شود:
- User-Agent
- IP
- Location
- Device Cookie
- رفتار کاربر
- زمان درخواست
- نوع عملیات
- Risk Score
تصمیم امنیتی بر اساس یک Signal منفرد معمولاً False Positive بیشتری ایجاد میکند.
نشانههای احتمالی Session Hijacking
Session Hijacking همیشه علامت واضح ندارد، اما نشانههای زیر میتوانند نیازمند بررسی باشند:
- Login یا فعالیت از IP ناشناس
- تغییر ناگهانی Location
- تغییر Email بدون اطلاع کاربر
- تغییر Password
- ایجاد API Key
- غیرفعالشدن 2FA
- ایجاد Administrator جدید
- تغییر تنظیمات امنیتی
- فعالیت همزمان غیرعادی از مناطق بسیار دور
- درخواستهای سریع و غیرمعمول
- تغییر اطلاعات مالی
- Logout ناگهانی کاربران
- افزایش شکایت درباره Account Takeover
هیچکدام از این نشانهها بهتنهایی اثبات Session Hijacking نیست.
تحلیل باید بر اساس Log و Context انجام شود.
چه رویدادهایی را برای تشخیص سرقت Session لاگ کنیم؟
Logging امنیتی میتواند شامل موارد زیر باشد:
- Login موفق
- Login ناموفق
- Logout
- Session Created
- Session Revoked
- Session Expired
- Password Changed
- Email Changed
- MFA Enabled
- MFA Disabled
- Role Changed
- Administrator Created
- API Token Created
- Sensitive Action
- Reauthentication Failed
اما نباید Secret واقعی Session در Log نوشته شود.
بهتر است برای Correlation از Identifier غیرحساس یا نسخه Hashشده مناسب استفاده شود.
واکنش به Session Hijacking مشکوک
اگر تصور میکنید حسابی از طریق Session تصاحب شده است، فقط تغییر Password کافی نیست که بدون بررسی Incident پرونده بسته شود.
یک فرآیند دفاعی مناسب میتواند شامل این مراحل باشد:
مرحله اول: Sessionهای فعال را Invalid کنید
Session مشکوک باید فوراً باطل شود.
در Incident جدیتر میتوان تمام Sessionهای حساب را Invalid کرد.
مرحله دوم: Credentialها را امن کنید
Password باید در صورت احتمال Compromise تغییر کند.
MFA نیز بررسی شود.
مرحله سوم: علت اصلی را پیدا کنید
ممکن است علت یکی از این موارد باشد:
- XSS
- Malware
- Plugin آسیبپذیر
- Token Leak
- Log Exposure
- Endpoint ناامن
- HTTP
- Session Fixation
اگر Root Cause اصلاح نشود، Token جدید نیز دوباره ممکن است افشا شود.
مرحله چهارم: تغییرات حساب را بررسی کنید
بررسی شود آیا مهاجم:
- Email را تغییر داده،
- Administrator ایجاد کرده،
- API Key ساخته،
- Password را تغییر داده،
- Plugin نصب کرده،
- Backdoor ایجاد کرده است.
مرحله پنجم: Logها را تحلیل کنید
زمان شروع فعالیت غیرمجاز مشخص شود و دامنه Incident بررسی شود.
اشتباهات رایج در امنیت Session
اشتباه اول: فکر کنیم HTTPS بهتنهایی کافی است
HTTPS انتقال داده را محافظت میکند اما XSS، Malware، Token Leak در Log یا Session Management ضعیف را برطرف نمیکند.
اشتباه دوم: فقط Login را HTTPS کنیم
Session Cookie پس از Login نیز حساس است.
کل Session باید روی HTTPS باشد.
اشتباه سوم: Session ID را در URL قرار دهیم
URL ممکن است در History و Logها باقی بماند و Secret نباید بیدلیل در آن قرار گیرد.
اشتباه چهارم: HttpOnly را جایگزین XSS Prevention بدانیم
HttpOnly فقط دسترسی مستقیم JavaScript به Cookie را محدود میکند.
XSS همچنان یک آسیبپذیری جدی است.
اشتباه پنجم: تصور کنیم SameSite تمام مشکلات Session را حل میکند
SameSite کنترل مهمی برای Cross-Site Requestهاست، اما Session Hijacking فقط CSRF نیست.
اشتباه ششم: Session را ماهها معتبر نگه داریم
Session Lifetime طولانی پنجره سوءاستفاده را افزایش میدهد.
اشتباه هفتم: Logout فقط Cookie را پاک کند
Session سمت Server نیز باید Invalid شود.
اشتباه هشتم: Session ID بعد از Login تغییر نکند
این ضعف میتواند زمینه Session Fixation را فراهم کند.
اشتباه نهم: Session Token را در Log ذخیره کنیم
Logها معمولاً افراد و سیستمهای زیادی را درگیر میکنند و نباید Secret Authentication در آنها ذخیره شود.
اشتباه دهم: فقط به 2FA اتکا کنیم
2FA امنیت Login را بسیار افزایش میدهد، اما Session Security یک لایه مستقل است. 
معماری دفاعی پیشنهادی برای Session Management
مدل مناسب را میتوان به چند لایه تقسیم کرد.
لایه اول: Transport Security
- HTTPS سراسری
- TLS معتبر
- Secure Cookie
- HSTS پس از بررسی
لایه دوم: Cookie Security
- Secure
- HttpOnly
- SameSite مناسب
- Domain محدود
- Path مناسب
- Lifetime محدود
لایه سوم: Session Lifecycle
- Session ID تصادفی
- Regeneration بعد از Login
- Idle Timeout
- Overall Timeout
- Logout واقعی
- Server-side Revocation
لایه چهارم: Application Security
- XSS Prevention
- CSRF Protection
- Access Control
- Input Validation
- Output Encoding
- CSP
لایه پنجم: Account Security
- Password قوی
- 2FA
- Passkey در صورت پشتیبانی
- Reauthentication
- Recovery امن
لایه ششم: Detection
- Security Logging
- Session Monitoring
- Device Signals
- IP Risk
- Alerting
جدول چکلیست امنیت Session
| کنترل امنیتی | اهمیت | هدف |
|---|---|---|
| HTTPS سراسری | بسیار بالا | جلوگیری از افشای Session در شبکه |
| Secure Cookie | بسیار بالا | جلوگیری از ارسال Cookie روی HTTP |
| HttpOnly | بسیار بالا | کاهش احتمال سرقت مستقیم Cookie توسط JavaScript |
| SameSite | بالا | کاهش برخی Requestهای Cross-Site |
| Session Regeneration | بسیار بالا | مقابله با Session Fixation |
| Idle Timeout | بالا | محدودکردن Session رهاشده |
| Overall Timeout | بالا | محدودکردن عمر کل Session |
| Server-side Logout | بسیار بالا | باطلکردن Session |
| XSS Prevention | بسیار بالا | جلوگیری از سوءاستفاده از Browser Context |
| CSRF Protection | بالا | جلوگیری از Requestهای ناخواسته |
| 2FA | بالا | محافظت از Login |
| Reauthentication | بسیار بالا | محدودکردن عملیات حساس |
| Security Logging | بالا | تشخیص Incident |
| Session Monitoring | متوسط تا بالا | کشف رفتار غیرعادی |
| WAF | مکمل | کاهش بخشی از حملات Web |
چکلیست توسعهدهنده برای جلوگیری از Session Hijacking
اگر توسعهدهنده Application هستید، موارد زیر را بررسی کنید:
- Session ID با CSPRNG تولید میشود؟
- Session ID قابل پیشبینی نیست؟
- Session ID حاوی User Data نیست؟
- Session بعد از Login Rotate میشود؟
- Session بعد از Privilege Change Rotate میشود؟
- Session قدیمی Invalid میشود؟
- Cookie دارای Secure است؟
- Cookie دارای HttpOnly است؟
- SameSite صریحاً تنظیم شده؟
- Domain بیش از حد گسترده نیست؟
- Session Token داخل URL نیست؟
- Token داخل Log نوشته نمیشود؟
- Logout Session را سمت Server باطل میکند؟
- Idle Timeout وجود دارد؟
- Overall Timeout وجود دارد؟
- Reauthentication برای عملیات حساس وجود دارد؟
- XSS Prevention پیاده شده؟
- CSRF Protection فعال است؟
- HTTPS سراسری است؟
- Sessionهای فعال قابل مشاهده یا Revocation هستند؟
- رویدادهای حساس Logging میشوند؟
اگر پاسخ چند مورد «خیر» باشد، Session Management باید بخشی از Security Review بعدی Application باشد.
چکلیست مدیر WordPress
برای مدیر سایت WordPress نیز اقدامات زیر اهمیت بالایی دارند:
- WordPress Core همیشه بهروز باشد.
- Pluginها بهروز باشند.
- Theme فعال بهروز باشد.
- Plugin و Theme بلااستفاده حذف شوند.
- HTTPS روی تمام سایت اجباری باشد.
- حساب Administrator از 2FA استفاده کند.
- تعداد Administratorها حداقل باشد.
- Sessionهای غیرضروری بسته شوند.
- Login Lifetime بیدلیل افزایش پیدا نکند.
- تغییرات Administrator Logging شوند.
- WAF بهعنوان لایه مکمل فعال باشد.
- Backup سالم و مستقل وجود داشته باشد.
- افزونههای امنیتی از منابع معتبر انتخاب شوند.
- XSS و CSRF در Pluginهای اختصاصی تست شوند.
- دسترسی توسعهدهندگان و پشتیبانها پس از پایان همکاری حذف شود.
تست امنیت Session باید چه چیزهایی را بررسی کند؟
در Security Assessment دفاعی، Session Management باید بهصورت جداگانه بررسی شود.
موارد مهم عبارتاند از:
Cookie Attributes
آیا Cookieهای Authentication:
- Secure
- HttpOnly
- SameSite
دارند؟
Session Rotation
آیا پس از Login Session Identifier تغییر میکند؟
Logout
آیا Token قدیمی پس از Logout واقعاً Invalid میشود؟
Timeout
آیا Session بدون Activity برای مدت غیرمنطقی فعال باقی میماند؟
Concurrent Sessions
آیا کاربر میتواند Sessionهای فعال را مدیریت کند؟
Sensitive Actions
آیا عملیات حساس بدون Reauthentication انجام میشوند؟
Token Exposure
آیا Secret در URL، Log یا Client Storage ناامن وجود دارد؟
این بررسیها باید در محیط مجاز و با هدف دفاعی انجام شوند.
امنیت Session برای حساب Administrator باید سختگیرانهتر باشد
همه Sessionها ارزش یکسان ندارند.
Session کاربری که فقط یک مقاله عمومی را مشاهده میکند با Session Administrator که میتواند Plugin نصب کند برابر نیست.
برای Privileged Accountها بهتر است کنترلهای سختگیرانهتری اعمال شود:
- Session کوتاهتر
- MFA اجباری
- Reauthentication
- Session Monitoring
- محدودیت Device در صورت نیاز
- Alert Security
- Audit Log
- حداقل دسترسی
اصل Least Privilege در اینجا اهمیت زیادی دارد.
آیا Passwordless Authentication مشکل Session Hijacking را حل میکند؟
خیر.
Passkey و Passwordless Authentication میتوانند حملات مرتبط با Password و Phishing را بهشدت کاهش دهند، اما بعد از Authentication همچنان Session ایجاد میشود.
اگر Session پس از Login ناامن مدیریت شود، ضعف به مرحله دیگری منتقل میشود.
بنابراین حتی Application مجهز به Passkey نیز به:
- Secure Session
- Timeout
- Revocation
- Reauthentication
- HTTPS
نیاز دارد.
آینده امنیت Session؛ از Bearer Token به Device-Bound Session
یکی از مشکلات کلاسیک Session Token این است که اگر Token صرفاً Bearer باشد، کپیکردن آن میتواند ارزش امنیتی زیادی داشته باشد.
فناوریهای جدیدتر تلاش میکنند Session را بیشتر به Device یا Keyهای Cryptographic متصل کنند تا داشتن رشته Token بهتنهایی کافی نباشد.
NIST نیز به فناوریهایی مانند Device-Bound Session Credentials اشاره میکند که هدف آنها کاهش قابلیت سوءاستفاده از Session Secret سرقتشده از طریق اثبات Cryptographic Possession است.
این فناوریها هنوز جایگزین تمام کنترلهای امنیت Session نشدهاند، اما مسیر مهمی در آینده Web Authentication محسوب میشوند.
سؤالات متداول درباره Session Hijacking
Session Hijacking چیست؟
Session Hijacking حملهای است که در آن مهاجم کنترل Session معتبر یک کاربر را به دست میآورد و ممکن است بدون دانستن Password، خود را بهعنوان همان کاربر به Application معرفی کند.
آیا HTTPS جلوی Session Hijacking را میگیرد؟
HTTPS بخش بسیار مهمی از دفاع است و از Session در برابر شنود ارتباط شبکه محافظت میکند، اما بهتنهایی کافی نیست. XSS، Malware، Token Leak، Session Fixation و مدیریت ضعیف Session همچنان میتوانند خطر ایجاد کنند.
آیا HttpOnly از سرقت Session جلوگیری میکند؟
HttpOnly دسترسی مستقیم JavaScript به Cookie را محدود میکند و دفاع مهمی در برابر سرقت Cookie در برخی XSSهاست، اما XSS را از بین نمیبرد و مانع همه شکلهای سوءاستفاده از Session نمیشود.
آیا 2FA مانع Session Hijacking میشود؟
2FA امنیت Login را افزایش میدهد، اما اگر Session بعد از Authentication به سرقت برود، ممکن است مهاجم بتواند بدون تکرار 2FA از Session استفاده کند. Reauthentication برای عملیات حساس این خطر را کاهش میدهد.
تفاوت Session Hijacking و Session Fixation چیست؟
در Session Hijacking مهاجم یک Session معتبر را تصاحب میکند؛ در Session Fixation مهاجم تلاش میکند قربانی را وادار کند از Session Identifier از پیش شناختهشده استفاده کند و Application پس از Login همان Session را معتبر نگه دارد.
آیا تغییر Password Sessionهای دزدیدهشده را باطل میکند؟
این موضوع به پیادهسازی Application بستگی دارد و نباید بدون بررسی فرض شود. یک سیستم امن باید قابلیت Server-side Revocation داشته باشد. در WordPress نیز Core مکانیزمهایی برای مدیریت و Invalid کردن Session Tokenها دارد.
جمعبندی؛ چگونه از سرقت Session و حساب کاربران جلوگیری کنیم؟
Session Hijacking یادآوری میکند امنیت Account فقط به صفحه Login محدود نیست.
بعد از اینکه Password، 2FA یا Passkey هویت کاربر را تأیید کردند، Application باید بتواند این وضعیت احراز هویتشده را بهصورت امن حفظ کند. در این مرحله Session ID یا Session Secret به یکی از حساسترین دادههای امنیتی تبدیل میشود.
اگر این Secret افشا شود، Session بیش از حد طولانی بماند، Logout آن را Server-Side باطل نکند یا Application در برابر XSS و Session Fixation آسیبپذیر باشد، مهاجم ممکن است بتواند از Session کاربر سوءاستفاده کند.
بهترین دفاع یک کنترل منفرد نیست، بلکه مجموعهای از لایههاست:
HTTPS سراسری + Secure Cookie + HttpOnly + SameSite + Session Rotation + Timeout + Revocation + XSS Prevention + CSRF Protection + Reauthentication + Security Monitoring
مدیران WordPress نیز باید امنیت Session را در کنار Update، 2FA، WAF و Hardening جدی بگیرند. مخصوصاً Session حساب Administrator باید مانند یک Credential حساس محافظت شود.
قاعده ساده این است:
هر کسی که بتواند Session معتبر کاربر را در اختیار بگیرد، ممکن است در عمل بخشی از اختیار همان کاربر را نیز به دست آورد.
بنابراین محافظت از Session باید بخشی ثابت از Secure Development Lifecycle، تست امنیت سایت و Incident Response باشد.