حمله Cross-Site Request Forgery که به اختصار CSRF یا XSRF نامیده میشود، یکی از رایجترین و مخربترین حملات در دنیای امنیت وب است. این حمله باعث میشود هکر بتواند بدون اجازه کاربر و تنها با سوءاستفاده از Session فعال او، اقداماتی را در سایتهای معتبر انجام دهد.
در بسیاری از سایتهای مهم از جمله وبسایتهای بانکی، سیستمهای مدیریت محتوا و پنلهای کاربری، این حمله میتواند خسارتهای جدی ایجاد کند.
در این مقاله از سایت رضا فروزان به صورت کامل با مفهوم CSRF، نحوه انجام حمله، مثال عملی، روشهای جلوگیری و تفاوت آن با XSS آشنا میشویم.
CSRF چیست و چگونه کار میکند؟
CSRF زمانی رخ میدهد که کاربر در یک سایت معتبر لاگین شده است و نشست او فعال است. هکر با ساختن یک لینک یا فرم مخرب، کاربر را تحریک به باز کردن آن میکند. سپس مرورگر کاربر، کوکی و Session معتبر را به همراه درخواستهای مخرب ارسال میکند و سایت قربانی تصور میکند این درخواست واقعی است.
سناریوی ساده حمله
-
کاربر وارد حساب سایت اصلی میشود (مثلاً حساب بانکی).
-
بدون خروج از حساب، وارد یک صفحه مخرب میشود.
-
صفحه مخرب درخواست خطرناکی را به سایت اصلی ارسال میکند.
-
مرورگر کاربر Session معتبر را همراه درخواست میفرستد.
-
سایت اصلی درخواست را واقعی تصور کرده و اجرا میکند.
کاربر حتی متوجه نمیشود چه اتفاقی افتاده است!
یک مثال واقعی از حمله CSRF
فرض کنید این لینک در سایت بانکی وظیفه انتقال پول را دارد:
هکر این لینک را داخل یک تصویر مخفی جاسازی میکند:
کاربر فقط با باز کردن صفحه، انتقال پول را انجام میدهد!
خطرات و آسیبهای حمله CSRF
CSRF بسته به نوع سایت میتواند خسارتهای مختلفی داشته باشد:
-
تغییر ایمیل یا رمز عبور کاربر
-
انتقال وجه در سیستمهای بانکی
-
ارسال فرمها یا پیامها بدون اطلاع کاربر
-
ثبت سفارش یا خرید ناخواسته
-
حذف اطلاعات در پنل مدیریت
-
تغییر تنظیمات امنیتی مدیر سایت
-
انجام عملیات حساس مالی
به همین دلیل CSRF یکی از مهمترین تهدیدهای امنیتی در استاندارد OWASP است.
علت اصلی آسیبپذیری CSRF
دلیل اصلی وقوع CSRF این است که:
-
مرورگر همیشه کوکی و Session را به طور خودکار ارسال میکند
-
سایت مقصد درخواست را واقعی فرض میکند
-
هیچ مکانیزمی برای تشخیص منبع واقعی درخواست وجود ندارد
در نتیجه هکر میتواند از کاربر برای ارسال درخواست ناخواسته استفاده کند.
روشهای جلوگیری از حمله CSRF
برای جلوگیری از CSRF روشهای استاندارد زیر استفاده میشود:
۱. استفاده از CSRF Token
مهمترین و مطمئنترین روش مقابله با CSRF استفاده از توکن ضد جعل درخواست است.
سرور یک توکن تصادفی و منحصربهفرد تولید میکند و آن را داخل فرم قرار میدهد. مثال:
وقتی ارسال میشود، سرور بررسی میکند:
-
توکن درست باشد
-
برای همان کاربر باشد
-
منقضی نشده باشد
اگر غیر معتبر باشد، درخواست رد میشود.
۲. بررسی Origin و Referer Header
سرور میتواند بررسی کند که درخواست از همان دامنه خود سایت آمده است.
اگر منبع درخواست مشکوک باشد، عملیات انجام نمیشود.
۳. استفاده از SameSite Cookie
با استفاده از تنظیمات SameSite در کوکیها میتوان از ارسال کوکی توسط دامنههای دیگر جلوگیری کرد:
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
استفاده کنند.
در سایت رضا فروزان سعی میکنیم جدیدترین آموزشهای امنیتی و برنامهنویسی را ارائه دهیم تا توسعهدهندگان بتوانند وبسایتهای امنتری طراحی کنند.



