حمله Cross-Site Request Forgery (CSRF)

حمله Cross-Site Request Forgery (CSRF)

حمله Cross-Site Request Forgery که به اختصار CSRF یا XSRF نامیده می‌شود، یکی از رایج‌ترین و مخرب‌ترین حملات در دنیای امنیت وب است. این حمله باعث می‌شود هکر بتواند بدون اجازه کاربر و تنها با سوءاستفاده از Session فعال او، اقداماتی را در سایت‌های معتبر انجام دهد.
در بسیاری از سایت‌های مهم از جمله وب‌سایت‌های بانکی، سیستم‌های مدیریت محتوا و پنل‌های کاربری، این حمله می‌تواند خسارت‌های جدی ایجاد کند.

در این مقاله از سایت رضا فروزان به صورت کامل با مفهوم CSRF، نحوه انجام حمله، مثال عملی، روش‌های جلوگیری و تفاوت آن با XSS آشنا می‌شویم.


CSRF چیست و چگونه کار می‌کند؟

CSRF زمانی رخ می‌دهد که کاربر در یک سایت معتبر لاگین شده است و نشست او فعال است. هکر با ساختن یک لینک یا فرم مخرب، کاربر را تحریک به باز کردن آن می‌کند. سپس مرورگر کاربر، کوکی و Session معتبر را به همراه درخواست‌های مخرب ارسال می‌کند و سایت قربانی تصور می‌کند این درخواست واقعی است.

سناریوی ساده حمله
  1. کاربر وارد حساب سایت اصلی می‌شود (مثلاً حساب بانکی).

  2. بدون خروج از حساب، وارد یک صفحه مخرب می‌شود.

  3. صفحه مخرب درخواست خطرناکی را به سایت اصلی ارسال می‌کند.

  4. مرورگر کاربر Session معتبر را همراه درخواست می‌فرستد.

  5. سایت اصلی درخواست را واقعی تصور کرده و اجرا می‌کند.

کاربر حتی متوجه نمی‌شود چه اتفاقی افتاده است!


یک مثال واقعی از حمله CSRF

فرض کنید این لینک در سایت بانکی وظیفه انتقال پول را دارد:

https://bank.com/transfer?to=4455666788&amount=2000000

هکر این لینک را داخل یک تصویر مخفی جاسازی می‌کند:

<img src="https://bank.com/transfer?to=4455666788&amount=2000000" style="display:none;">

کاربر فقط با باز کردن صفحه، انتقال پول را انجام می‌دهد!


خطرات و آسیب‌های حمله CSRF

CSRF بسته به نوع سایت می‌تواند خسارت‌های مختلفی داشته باشد:

  • تغییر ایمیل یا رمز عبور کاربر

  • انتقال وجه در سیستم‌های بانکی

  • ارسال فرم‌ها یا پیام‌ها بدون اطلاع کاربر

  • ثبت سفارش یا خرید ناخواسته

  • حذف اطلاعات در پنل مدیریت

  • تغییر تنظیمات امنیتی مدیر سایت

  • انجام عملیات حساس مالی

به همین دلیل CSRF یکی از مهم‌ترین تهدیدهای امنیتی در استاندارد OWASP است.


علت اصلی آسیب‌پذیری CSRF

دلیل اصلی وقوع CSRF این است که:

  • مرورگر همیشه کوکی و Session را به طور خودکار ارسال می‌کند

  • سایت مقصد درخواست را واقعی فرض می‌کند

  • هیچ مکانیزمی برای تشخیص منبع واقعی درخواست وجود ندارد

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


روش‌های جلوگیری از حمله CSRF

برای جلوگیری از CSRF روش‌های استاندارد زیر استفاده می‌شود:


۱. استفاده از CSRF Token

مهم‌ترین و مطمئن‌ترین روش مقابله با CSRF استفاده از توکن ضد جعل درخواست است.

سرور یک توکن تصادفی و منحصر‌به‌فرد تولید می‌کند و آن را داخل فرم قرار می‌دهد. مثال:

<input type="hidden" name="csrf_token" value="AB12XK99">

وقتی ارسال می‌شود، سرور بررسی می‌کند:

  • توکن درست باشد

  • برای همان کاربر باشد

  • منقضی نشده باشد

اگر غیر معتبر باشد، درخواست رد می‌شود.


۲. بررسی Origin و Referer Header

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


۳. استفاده از SameSite Cookie

با استفاده از تنظیمات SameSite در کوکی‌ها می‌توان از ارسال کوکی توسط دامنه‌های دیگر جلوگیری کرد:

Set-Cookie: sessionid=xyz; SameSite=Strict; Secure

SameSite=Strict تقریباً CSRF را غیرممکن می‌کند.


۴. استفاده از روش POST برای عملیات مهم

عملیات حساس نباید با روش GET انجام شود.
GET به راحتی از طریق img, iframe یا لینک قابل سوءاستفاده است.


۵. استفاده از کپچا در عملیات حیاتی

وجود CAPTCHA باعث می‌شود درخواست توسط ربات یا اسکریپت مخرب ارسال نشود.


۶. کاهش زمان Session و خروج خودکار

Sessionهای طولانی شانس حمله را زیاد می‌کنند.
بهتر است Session کاربران پس از مدتی عدم فعالیت منقضی شود.


تفاوت CSRF با XSS

بسیاری از افراد CSRF و XSS را با هم اشتباه می‌گیرند. اما این دو حمله کاملاً متفاوت هستند:

ویژگی CSRF XSS
هدف اصلی سوءاستفاده از Session کاربر تزریق اسکریپت و اجرای کد
نیاز به ورودی؟ خیر بله
سطح خطر بالا بسیار بالا
نحوه انجام ارسال درخواست جعلی اجرای کد در مرورگر
ارتباط XSS می‌تواند باعث CSRF شود CSRF بدون XSS هم قابل انجام است

چرا CSRF خطرناک است؟

  • قربانی هیچ نشانه‌ای دریافت نمی‌کند.

  • به سختی قابل تشخیص است.

  • در سایت‌های بانکی و فروشگاهی می‌تواند ضرر مالی ایجاد کند.

  • در پنل‌های مدیریت باعث تغییرات گسترده می‌شود.

  • با XSS ترکیب شود، قدرت ویرانگری بسیار بیشتری پیدا می‌کند.


حمله CSRF یک روش هوشمندانه برای فریب کاربر و استفاده از Session معتبر او است.
در این حمله، هکر می‌تواند کارهای مهمی مانند انتقال پول، تغییر رمز، ثبت سفارش یا حتی حذف اطلاعات را بدون اطلاع قربانی انجام دهد.

به همین دلیل توسعه‌دهندگان باید در پروژه‌های خود حتماً از:

  • CSRF Token

  • بررسی Origin

  • SameSite Cookie

  • محدود کردن GET

  • کپچا
    و مدیریت درست Session
    استفاده کنند.

در سایت رضا فروزان سعی می‌کنیم جدیدترین آموزش‌های امنیتی و برنامه‌نویسی را ارائه دهیم تا توسعه‌دهندگان بتوانند وب‌سایت‌های امن‌تری طراحی کنند.

رضا فروزان
رضا فروزان

علاقه‌ی من به تکنولوژی از سال‌های نخستین تحصیلم آغاز شد و به مرور، به یک مسیر حرفه‌ای تبدیل شد. در این مسیر، با پروژه‌های متنوعی در زمینه‌های طراحی وب‌سایت، تولید نرم‌افزار، امنیت داده‌ها و پیاده‌سازی شبکه‌های سازمانی همکاری داشته‌ام و همواره تلاش کرده‌ام تا هر پروژه را با بالاترین کیفیت، خلاقیت و دقت اجرا کنم

مقالات مرتبط
پاسخ دهید

آدرس ایمیل شما منتشر نخواهد شد.قسمتهای مورد نیاز علامت گذاری شده اند *