آنچه در این مقاله میخوانید
شرح حمله CSRF به زبان ساده
۲۳ خرداد ۱۴۰۰
CSRF را میتوان مخفف شدهی عبارت Cross Site Request Forgery دانست که با نامهای دیگری مانند XSRF، Sea Surf، Session Riding، Cross-Site Reference Forgery، Hostile Linking، One-Click Attack شناخته میشود و اکثر اوقات با روشهای مهندسی اجتماعی همراه است.
هدف این حمله را میتوانیم اجرای یک درخواست ناخواسته توسط کاربر مورد هدف بدانیم. برای مثال فرض کنید که همزمان در حال بررسی ایمیلهای خود هستید و در یک سامانهی آنلاین مالی هم وارد شدهاید. در ادامهی این سناریو ممکن است ایمیلی ناشناخته را باز کرده و بر روی یک لینک برای دریافت یک تخفیف جذاب کلیک کنید اما این لینک در اصل درخواستی برای انتقال وجه از حساب شما به حساب دیگری است و از آنجا که احراز هویت شما از قبل در سامانهی مالی با موفقیت انجام شده بنابراین فرایند انتقال وجه انجام خواهد شد.
اگر بهخوبی به مثال فوق دقت کرده باشید، متوجه خواهید شد که برای انجام حملهی CSRF به یک سناریو نیاز است و شرایط باید فراهم باشد. در وهلهی اول باید یک مهاجم وجود داشته باشد که برای هدف خود این سناریو را برنامهریزی کند.
در وهلهی دوم، برنامهی اینترنتی یا همان سامانهی آنلاین مالی که در مثال فوق به آن اشاره کردیم باید از پارامترهای قابل پیشبینی استفاده کند و هیچ پارامتر تصادفیای وجود نداشته باشد.
و در آخر میتوان گفت که این حمله با ارسال درخواستهای HTTP رخ میدهد و در برنامههای وب شایع است زیرا در اکثر این برنامهها از Cookieها برای احراز هویت درخواستهای کاربر استفاده میشود.
احتمالا این توضیحها برای درک چگونگی حملهی CSRF کافی باشند اما بهعنوان یک برنامهنویس چگونه میتوانیم برنامهی خود را از حملههای CSRF ایمن نگه داریم؟

آنچه در این مقاله میخوانید:
- چگونه میتوان جلوی حملههای CSRF را گرفت؟
- چرا CSRF خطرناک است؟
- تفاوت CSRF و XSS چیست؟
- جمع بندی
چگونه میتوان جلوی حملههای CSRF را گرفت؟
برای جلوگیری از حملههای CSRF چند مورد وجود دارد که باید به آنها دقت داشته باشید:
فریمورک خود را با دقت انتخاب کنید
انتخاب یک فریمورک مناسب مانند Laravel میتواند در جلوگیری از حملههای CSRF بسیار تاثیرگذار باشد.
استفاده از توکنهای تصادفی
حال فرض کنید که نمیخواهید از یک فریمورک استفاده کنید بنابراین باید بهسراغ راه حلی بعدی یعنی استفاده از توکنهای تصادفی بروید. این توکنها در بکاند برنامه برای هر درخواست بهصورت تصادفی ایجاد میشوند و زمان انقضای مشخصی دارند.
همچنین برای مقایسهی این توکنهای تصادفی باید از روشی ایمن مانند مقایسهی هشها استفاده شود و علاوهبر آن نباید این توکنهای تصادفی را در URL بهصورت درخواست GET استفاده کنید.
استفاده از مقدار SameSite در Cookieها
با تنظیم مقدار SameSite
میتوان از احراز هویت کاربر با Cookie توسط درخواستهای ایجاد شده با دامنههای دیگر جلوگیری کرد.
مشارکت کاربر در انجام اقدامهای حساس
برای انجام اقدامهای حساس مانند انتقال وجه یا تغییر رمز عبور میتوانید کاربر را با استفاده از CAPTCHA، توکنهای یکبار مصرف یا احراز هویت مجدد در تکمیل فرایندها مشارکت دهید.
نحوه استفاده از Nmap برای اسکن پورتهای باز را در مقاله زیر بخوانید.
استفاده از Nmap
چرا CSRF خطرناک است؟
این حمله میتواند منجر به سوءاستفاده مالی، تغییر اطلاعات کاربری، حذف دادهها و حتی تسلط کامل بر حساب کاربر شود. از آنجا که این حمله در قالب درخواست معتبر اجرا میشود، شناسایی آن توسط سیستم احراز هویت دشوار است.
تفاوت CSRF و XSS چیست؟
بسیاری از توسعهدهندگان این دو حمله را اشتباه میگیرند. یک توضیح مقایسهای مختصر مفید خواهد بود:
برخلاف CSRF که کاربر قربانی را به انجام عملی ناخواسته سوق میدهد، در حملهی XSS (Cross-Site Scripting)، کد مخرب در مرورگر قربانی تزریق و اجرا میشود. در واقع CSRF از احراز هویت کاربر سوءاستفاده میکند اما XSS از اعتماد کاربر به محتوای سایت.
جمع بندی
حملههای CSRF از آن دسته تهدیدهای امنیتی هستند که اگر بهدرستی به آنها پرداخته نشود، میتوانند آسیبهای جدی به کاربران و اعتبار محصولهای تحت وب وارد کنند. استفاده از روشهایی مانند توکنهای CSRF، تنظیم SameSite و تأیید هویت چندمرحلهای، گامهای مهمی برای ایمنسازی برنامهها در برابر این حملات هستند. آگاهی، تست مداوم و انتخاب فریمورک مناسب کلید مقابله با این تهدید است.