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