شرح حمله 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 چند مورد وجود دارد که باید به آنها دقت داشته باشید:
فریمورک خود را با دقت انتخاب کنید
انتخاب یک فریمورک مناسب مانند Laravel میتواند در جلوگیری از حملههای CSRF بسیار تاثیرگذار باشد.
استفاده از توکنهای تصادفی
حال فرض کنید که نمیخواهید از یک فریمورک استفاده کنید بنابراین باید بهسراغ راه حلی بعدی یعنی استفاده از توکنهای تصادفی بروید. این توکنها در بکاند برنامه برای هر درخواست بهصورت تصادفی ایجاد میشوند و زمان انقضای مشخصی دارند.
همچنین برای مقایسهی این توکنهای تصادفی باید از روشی ایمن مانند مقایسهی هشها استفاده شود و علاوهبر آن نباید این توکنهای تصادفی را در URL بهصورت درخواست GET استفاده کنید.
استفاده از مقدار SameSite در Cookieها
با تنظیم مقدار SameSite
میتوان از احراز هویت کاربر با Cookie توسط درخواستهای ایجاد شده با دامنههای دیگر جلوگیری کرد.
مشارکت کاربر در انجام اقدامهای حساس
برای انجام اقدامهای حساس مانند انتقال وجه یا تغییر رمز عبور میتوانید کاربر را با استفاده از CAPTCHA، توکنهای یکبار مصرف یا احراز هویت مجدد در تکمیل فرایندها مشارکت دهید.