Cross-Site Request Forgery (CSRF) یک آسیبپذیری وب است که مهاجم را قادر میسازد کاربرِ احراز هویتشده را فریب دهد تا عملی را بدون قصد کاربر انجام دهد. این حملات معمولاً برای تغییر وضعیت (مانند انتقال پول، تغییر ایمیل یا رمزعبور) استفاده میشوند و در صورت هدفگیری حسابهای مدیریتی میتوانند منجر به تسلط کامل بر برنامه شوند. در این مقاله به تعریفCSRF، سازوکار حمله، تأثیرات، راهکارهای دفاعی (از جمله پیادهسازی توکنها و سیاستهای SameSite) و در انتها یک بخش تکمیلی دربارهی SSRF (Server-Side Request Forgery) میپردازیم.
آنچه در ادامه میخوانید:
چرا CSRF یک تهدید مهم در امنیت سایبری است؟
حمله CSRF چیست و چگونه امنیت سازمانها را تهدید میکند؟
پیامدها و تأثیرات CSRF بر حفاظت اطلاعات
بهترین شیوههای توسعه امن برای پیشگیری از CSRF
تشخیص و تست (نکات برای تیمهای امنیتی)
SSRF چیست و چه تفاوتی با CSRF دارد؟
چکلیست نهایی برای بهبود حفاظت اطلاعات و امنیت سایبری
در دنیای وبمحور امروز، حفاظت اطلاعات و امنیت سایبری به اندازهی طراحی و توسعهی صحیح نرمافزار اهمیت دارد. بسیاری از برنامهها برای شناسایی کاربر به کوکیهای نشست (session cookies) تکیه میکنند؛ همین اعتمادِ خودکار مرورگر به کوکیها است که CSRF را ممکن میسازد. یک حمله موفق میتواند نه تنها حریم خصوصی کاربران را نقض کند، بلکه به از بین رفتن دادهها، اختلال سرویس و حتی تصاحب کامل برنامه منجر شود بهویژه زمانی که حسابهای مدیریتی هدف قرار گیرند.
با افزایش استفاده از سرویسهای آنلاین، بانکداری دیجیتال و سامانههای سازمانی، حملات CSRF به یکی از نگرانیهای اصلی متخصصان امنیت سایبری تبدیل شده است. بسیاری از حملات موفق به دلیل نبود مکانیزمهای حفاظتی مناسب مانند CSRF Token یا تنظیمات امنیتی مرورگر رخ میدهند. بنابراین، پیادهسازی کنترلهای امنیتی مناسب برای جلوگیری از این نوع حملات برای هر سازمان ضروری است.
حمله CSRF چیست و چگونه امنیت سازمانها را تهدید میکند؟
Cross-Site Request Forgery (CSRF) نوعی آسیبپذیری وب است که مهاجم با فریب کاربرِ احراز هویتشده، باعث میشود مرورگر آن کاربر درخواستهایی را به سرورِ هدف ارسال کند. از آنجا که مرورگر بهصورت خودکار کوکیهای مرتبط را میفرستد، سرور اغلب این درخواستها را معتبر تلقی میکند.
در حوزه تست نفوذ و امنیت برنامههای کاربردی وب، CSRF بهعنوان یکی از آسیبپذیریهای مهم در استانداردهای امنیتی شناخته میشود. این حمله معمولاً در ارزیابیهای امنیتی برنامههای تحت وب بررسی شده و عدم وجود مکانیزمهای محافظتی میتواند نشاندهنده ضعف در طراحی امنیتی سیستم باشد.
یک سناریوی عمومی CSRF شامل مراحل زیر است:
۱. وجود یک عمل حساس در برنامه (مثلاً تغییر ایمیل یا انتقال وجه).
۲. کاربر بهصورت قانونی قبلأ وارد سایت هدف شده و کوکی نشست فعال دارد.
۳. مهاجم صفحه یا ایمیلی حاوی عنصری که درخواست حساسی ایجاد میکند مثلاً لینک یا تصویر با URL خاص آماده میکند.
۴. کاربر آن صفحه را باز یا روی لینک کلیک میکند؛ مرورگر او بهطور خودکار کوکی را همراه درخواست میفرستد و سرور درخواست را معتبر میشمارد.
نکته مهم: CSRF بهطور کلاسیک زمانی رخ میدهد که سرور تنها به کوکیها تکیه دارد و پارامترهای غیرقابلپیشبینی (مثل توکنهای اختصاصی) در درخواست وجود ندارد.
پیامدهای یک حمله موفق ممکن است شامل موارد زیر باشد:
بدون تدابیر مناسب، CSRF میتواند بهسرعت به یک بحران امنیتی منجر شود که شهرت و عملکرد سازمان را متضرر میکند.
ترکیب این روشها میتواند احتمال موفقیت حملات CSRF را بهطور قابل توجهی کاهش دهد.
وقتی یک کاربر از یک صفحه وب بازدید میکند، مثلاً صفحه وب بانک که امکان انتقال وجه را فراهم میکند، وبسایت بانک یک توکن تصادفی را در فرم قرار میدهد. زمانی که کاربر فرم را ارسال میکند، این توکن تصادفی نیز بازگردانده میشود و بانک میتواند بررسی کند که آیا این دو توکن با هم مطابقت دارند یا نه. اگر توکنها یکسان باشند، انتقال انجام میشود. مهاجم هیچ راهی برای دسترسی به مقدار توکن تصادفی ایجادشده در صفحه وب ندارد و اگر صفحه را درخواست کند، سیاست same-origin مانع از خواندن پاسخ توسط مهاجم میشود.
نقطه ضعف این روش کاهش خطر (mitigation) این است که بار بیشتری بر سمت سرور برای بررسی اعتبار توکنها در هر درخواست وارد میکند. همچنین ممکن است در شرایطی مانند باز بودن چندین پنجره مرورگر توسط کاربر یا موقعیتهایی که نرمافزارهای مختلف درخواست را ارسال میکنند، مشکلاتی ایجاد شود. با گسترش محدوده توکن بهصورت «برای هر نشست» (session) بهجای «برای هر درخواست»، میتوان از برخی از این مشکلات جلوگیری کرد.
روش دیگر شامل ارسال یک کوکی به مرورگر وب بازدیدکننده است که حاوی یک توکن تصادفی میباشد. جاوااسکریپت اجراشده در سمت کاربر مقدار توکن موجود در کوکی را خوانده و آن را در یک هدر HTTP کپی میکند که همراه هر درخواست ارسال میشود. اگر درخواست واقعی از طرف کاربر ارسال شده باشد، مقدار موجود در هدر توسط سرور قابل تایید خواهد بود. در سایر موارد، اعتبارسنجی شکست میخورد و از موفقیت حمله جلوگیری میشود.
با استفاده از قوانین سفارشی از طریق یک WAF (فایروال برنامههای وب)، کاربران میتوانند به جلوگیری از برخی حملات CSRF کمک کنند.
همیشه برای عملیات تغییر وضعیت، توکن ضدCSRF ضروری است. از روشهای authentication مبتنی بر توکن مثل JWT در هدر (Authorization) همراه با ورود امن استفاده کنید؛ توکنها در هدر ارسال شوند نه در کوکی بهصورت خودکار.
توجه امنیتی: انتشار روشهای دقیق و گامبهگام ساخت PoC برای حمله میتواند سوءاستفاده شود؛ بنابراین تمرکز تیمهای امنیتی باید روی تست کنترلشده و اخلاقی در محیطهای امن (lab) و با هدف اصلاح باشد.
Server-Side Request Forgery (SSRF) زمانی رخ میدهد که یک مهاجم باعث میشود سرورِ آسیبپذیر، درخواستهایی را به منابع داخلی یا خارجی ارسال کند که مهاجم مشخص میکند. برخلاف CSRF که مرورگر کاربر را فریب میدهد، SSRF سرور را وادار به عمل میکند و میتواند نتیجههایی بسیار خطرناک داشته باشد. دسترسی به سرویسهای داخلی مانند metadata سرویس در پلتفرمهای ابری، افشای اطلاعات حساس، یا نفوذ به شبکه داخلی.
۱. ورودیها را اعتبارسنجی و محدود کنید: فقط URLها/دامنههایی که اجازه دارند را بهصورت allowlist بپذیرید.
۲. محدود کردن دسترسی شبکهای (Egress Filtering): اجازه ندهید سرور به هر مقصدی خارج از محدودهی مجاز وصل شود.
۳. مسدودسازی دسترسی به آدرسهای محلی و metadata: درخواستهایی به 127.0.0.1، 169.254.169.254 و رنجهای داخلی را بلوکه کنید مگر در موارد کاملاً کنترلشده.
۴. عدم دنبالکردن redirectهای ناامن: از follow-redirect خودکار جلوگیری کنید یا آن را با احتیاط مدیریت کنید.
۵. استفاده از کتابخانههای HTTP امن و timeout: محدود کردن زمان و اندازه پاسخ تا سرور در دام درخواستهای طولانی نرود.
۶. ثبت و مانیتورینگ: لاگگیری از درخواستهای خروجی برای تشخیص الگوهای مشکوک.
CSRF و SSRF دو نمونه از آسیبپذیریهای وب هستند که میتوانند بهطور مستقیم حفاظت اطلاعات و امنیت سایبری سازمان را تهدید کنند. اما با پیادهسازی روشهای پایهای و صنعتی مانند توکنهای ضد CSRF، تنظیمات کوکی امن، محدودیتهای خروجی شبکه و ارزیابی ورودیها میتوان ریسکهای مرتبط را بهطور مؤثری کاهش داد. امنیت واقعی از توسعهی امن، پیکربندی صحیح و نظارت مستمر حاصل میشود.

CSRF یا Cross-Site Request Forgery نوعی آسیبپذیری وب است که در آن مهاجم کاربرِ احراز هویتشده را فریب میدهد تا بدون اطلاع خود، درخواست مخربی را به یک وبسایت ارسال کند.
در این حمله، کاربر قبلاً در سایت هدف وارد شده و کوکی نشست فعال دارد. مهاجم لینکی یا المانی مخرب ایجاد میکند که با کلیک کاربر، مرورگر بهصورت خودکار کوکی را همراه درخواست ارسال میکند و سرور آن را معتبر تلقی میکند.
اتکای سرور به کوکیهای نشست بدون استفاده از مکانیزمهای محافظتی مانند CSRF Token یا پارامترهای غیرقابل پیشبینی.
ویژگی SameSite در کوکیها مانع ارسال خودکار کوکیها در درخواستهای بینسایتی میشود و احتمال موفقیت حملات CSRF را کاهش میدهد.
SSRF یا Server-Side Request Forgery نوعی آسیبپذیری است که در آن مهاجم سرور آسیبپذیر را مجبور میکند به منابع داخلی یا خارجی درخواست ارسال کند.