💡 مشاوره

مارک پلاس

تکنولوژی نوین اینترنتی

Session Fixation و Session Hijacking در وب

Session Fixation و Session Hijacking در وب

مدیریت نادرست نشست‌ها و حملات Session Fixation / Session Hijacking

مقدمه

در برنامه‌های وب، نشست (Session) برای نگهداری وضعیت ورود کاربر و اطلاعات او بین درخواست‌های مختلف استفاده می‌شود. اگر این نشست‌ها به‌درستی مدیریت نشوند، مهاجم می‌تواند کنترل آن‌ها را به دست بگیرد. دو حمله مهم در این حوزه Session Fixation و Session Hijacking هستند.


Session چیست؟

Session یک شناسه موقت است که سرور برای هر کاربر ایجاد می‌کند تا او را در طول استفاده از سایت شناسایی کند. معمولاً این شناسه در قالب یک کوکی ذخیره می‌شود:

session_id=abc123xyz

اگر این شناسه به دست مهاجم بیفتد، او می‌تواند خود را به جای کاربر جا بزند.


Session Hijacking چیست؟

در حمله Session Hijacking، مهاجم شناسه نشست فعال کاربر را سرقت کرده و از آن برای دسترسی غیرمجاز استفاده می‌کند.

روش‌های رایج سرقت نشست:

  • شنود شبکه (Packet Sniffing) در HTTP
  • بدافزار روی سیستم کاربر
  • XSS (تزریق اسکریپت در مرورگر)
  • دسترسی به مرورگر یا کوکی‌ها
  • فیشینگ و صفحات جعلی

نتیجه حمله:

مهاجم می‌تواند:

  • وارد حساب کاربر شود
  • عملیات به نام کاربر انجام دهد
  • اطلاعات حساس را مشاهده یا تغییر دهد

Session Fixation چیست؟

در حمله Session Fixation، مهاجم از قبل یک شناسه نشست معتبر می‌سازد و آن را به کاربر قربانی تحمیل می‌کند. سپس کاربر با همان شناسه وارد سیستم می‌شود و مهاجم بعداً از همان نشست استفاده می‌کند.


مثال ساده از سناریو:

  1. مهاجم یک Session ID تولید می‌کند:

    session_id=FIXED123
  2. این شناسه را به قربانی ارسال می‌کند (مثلاً لینک یا کوکی)
  3. قربانی وارد سایت و لاگین می‌شود
  4. سرور همان Session ID را برای حساب کاربر معتبر می‌کند
  5. مهاجم با همان ID وارد حساب قربانی می‌شود

تفاوت Session Fixation و Hijacking

ویژگیSession HijackingSession Fixation
زمان حملهبعد از لاگینقبل از لاگین
هدفسرقت نشست فعالمجبور کردن استفاده از نشست مشخص
نیاز به کنترل قبلیندارددارد
روش رایجXSS، sniffingلینک یا کوکی آلوده

دلایل وقوع این آسیب‌پذیری‌ها

1. عدم تغییر Session بعد از لاگین

اگر شناسه نشست بعد از ورود کاربر تغییر نکند:

$_SESSION['user'] = $user;

در حالی که Session ID همان قبلی باقی بماند، خطر افزایش می‌یابد.


2. استفاده از HTTP به جای HTTPS

در HTTP داده‌ها رمزگذاری نمی‌شوند و قابل شنود هستند.


3. ضعف در تنظیم کوکی‌ها

  • عدم استفاده از HttpOnly
  • عدم استفاده از Secure
  • عدم تنظیم SameSite

4. پذیرش Session ID از URL

مثلاً:

site.com/profile?session_id=abc123

این روش بسیار ناامن است.


پیامدهای حمله

در صورت موفقیت حمله:

  • دسترسی کامل به حساب کاربر
  • انجام تراکنش‌های مالی غیرمجاز
  • تغییر اطلاعات شخصی
  • سرقت داده‌های حساس
  • افزایش سطح دسترسی در سیستم

روش‌های پیشگیری

1. تغییر Session ID پس از لاگین

یکی از مهم‌ترین اقدامات:

session_regenerate_id(true);

2. استفاده از HTTPS

تمام ارتباطات باید رمزگذاری شوند تا امکان شنود وجود نداشته باشد.


3. تنظیم صحیح کوکی‌ها

HttpOnly = true
Secure = true
SameSite = Strict یا Lax

4. جلوگیری از ارسال Session در URL

Session فقط باید در کوکی‌ها ذخیره شود، نه در لینک‌ها.


5. تعیین زمان انقضا برای نشست

  • Session timeout
  • Logout خودکار پس از عدم فعالیت

6. بررسی IP و User-Agent (با احتیاط)

برخی سیستم‌ها تغییرات غیرعادی را بررسی می‌کنند:

  • تغییر IP ناگهانی
  • تغییر مرورگر

(البته این روش‌ها باید با دقت استفاده شوند چون ممکن است باعث خطا شوند)


جمع‌بندی

حملات Session Hijacking و Session Fixation از خطرناک‌ترین تهدیدهای امنیتی در وب هستند که هدف آن‌ها تصاحب نشست کاربر و دسترسی غیرمجاز به حساب او است. این حملات معمولاً ناشی از مدیریت ضعیف Session، استفاده از ارتباطات ناامن و تنظیمات اشتباه کوکی‌ها هستند.

با استفاده از HTTPS، بازسازی Session پس از لاگین، تنظیم صحیح کوکی‌ها و جلوگیری از افشای Session ID می‌توان تا حد زیادی از این حملات جلوگیری کرد.