شرح حمله 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، توکنهای یکبار مصرف یا احراز هویت مجدد در تکمیل فرایندها مشارکت دهید.
توسعهدهندگان دربارهی ما چه میگویند
تجربه کار باliara_cloud@امروز خیلی خوب بود. یکی از سرویس هام رو منتقل کردم روش و راضیم. انقد سریع و جذاب کارم راه افتادم اصن باورم نمیشد! برعکس سرویس های PaaS دیگه با اون همه پیچیدگیشون. دمتون گرم
...
MohammadReza
![liara testimonial]()
keikaavousi
بعد از بسته شدن @fandoghpaas و ناراحتی همهمون از اینکه یه سرویس خوب و صادق نمیتونه از پس هزینهها بر بیاد، سرویسم رو منتقل کردم به پاس لیارا (https://liara.ir @liara_cloud) . تجربه راحت و خوب. تفاوتهایی داشت که کمی کار میخواست ولی تا الان کاملا راضی.
jadi
![liara testimonial]()
jadi
با قدرت میتونم بگم تیم پشتیانی لیاراliara_cloud@یکی از بهترین تیمهای پشتیبانی که تا حالا دیدم. کارشون ارائه سرویسهای PaaS هست ولی من سوال در سطح برنامه خودمم(نه زیرساخت پلتفرم) که میپرسم بازم کامل و به موقع راهنمایی میکنن.
Amir
![liara testimonial]()
amirmazinani_ir
واسه سرویس PaaS با اختلاف لیارا بهترین رابط کاربری داره و یکی از مزیتهای سرویس دیتابیسشون اینه که خودشون به صورت دورهای بکآپ میگیرن.
...
Ali Najafi
![liara testimonial]()
me_ali_najafi
یکی از کارهای خوبی که جدیداً میکنم اینه که یه دیتابیس روی لیارا میسازم و به پروژه وصل میکنم اینطوری هم خونه و هم محل کار دیتابیس بروز رو دارم و راحت میتونم ادامه بدم کار روliara_cloud@
Navid
![liara testimonial]()
1navid
عاشقliara_cloud@شدم درسته در حد AWS نیست ولی خب تجربه خوبی واسه پروژه های داخل ایران ارائه میده، میتونم رو CD هم اجراش کنم
Amir H Shekari
![liara testimonial]()
vanenshi