نوعی حمله است که به مهاجمان اجازه میدهد تا از طرف کاربر قانونی که به یک وبسایت خاص وارد شده است، درخواست های غیرمجاز به سرور ارسال کنند. در این حمله، مهاجم قادر است با استفاده از اعتبار جلسه کاربر، درخواستهایی را به وبسایت هدف ارسال کند که به طور معمول به دسترسیها یا تغییرات غیرمجاز منجر میشود.
اعتبار جلسه: CSRF از اعتبار جلسه کاربر(مانند کوکیها یا توکنهای احراز هویت) برای ارسال درخواستهای غیرمجاز استفاده میکند.
عدم اعتبارسنجی: وبسایت هدف ممکن است درخواستهایی که از منابع معتبر ظاهر میشوند را بدون بررسی دقیق اعتبارسنجی کند.
مثال: فرض کنید یک وبسایت بانکی به کاربران اجازه میدهد تا از طریق فرم وب، پول به حساب دیگری منتقل کنند. اگر وبسایت بدون استفاده از اقدامات امنیتی مناسب طراحی شده باشد، مهاجم میتواند با ساخت یک فرم HTML که به طور خودکار درخواست انتقال پول را ارسال کند، اقدام به حمله CSRF کند.
مهاجم: یک وبسایت مخرب ایجاد میکند که شامل یک فرم مخفی است. این فرم به طور خودکار درخواست انتقال پول به حساب مهاجم را به وبسایت بانکی ارسال میکند.
<form action="https://www.bank.com/transfer" method="POST" style="display:none;"> <input type="hidden" name="amount" value="1000" /> <input type="hidden" name="recipient" value="account" /> <input type="submit" /> </form> document.forms[0].submit();
فریب کاربر: مهاجم کاربر را به بازدید از این وبسایت مخرب فریب میدهد. کاربر باید قبلا وارد وبسایت بانکی خود شده باشد و نشست(session) معتبر داشته باشد.
اجرای حمله: هنگامی که کاربر وارد وبسایت مخرب میشود، کد جاوااسکریپت به طور خودکار فرم را ارسال میکند. درخواست انتقال پول با اعتبار نشست کاربر به وبسایت بانکی ارسال میشود.
نتیجه: درخواست انتقال پول از حساب کاربر به حساب مهاجم انجام میشود، زیرا سرور وبسایت بانکی درخواست را معتبر میداند و تایید نمیکند که آیا درخواست از طرف کاربر قانونی ارسال شده است یا خیر.
انتقال پول غیرمجاز: تغییرات مالی از جمله انتقال پول به حسابهای مهاجم (مثال)
تغییرات در دادهها: به روزرسانی یا حذف دادهها به صورت غیرمجاز
تغییرات تنظیمات حساب: تغییر تنظیمات امنیتی یا اطلاعات حساس کاربر
حملات فیشینگ: کاربران میتوانند به سایتهای مخرب هدایت شوند و اطلاعات شخصی خود را فاش کنند.
استفاده از توکنهای CSRF: اضافه کردن توکنهای تصادفی و منحصر به فرد به فرمها و درخواستهای POST، این توکنها باید با هر درخواست ارسال شوند و بررسی شوند تا از تطابق آنها با توکن ذخیره شده در سرور اطمینان حاصل شود.
مثال:
<input type="hidden" name="csrf_token" value="random_csrf_token_here" />
بررسی مبدا درخواست: تایید مبدا درخواست با استفاده از هدرهای HTTP مثل Referer یا Origin برای اطمینان از اینکه درخواست از یک منبع معتبر آمده است.
استفاده از روشهای HTTP مناسب: محدود کردن عملیات حساس به درخواستهای POST و استفاده از درخواستهای GET برای درخواستهای غیرتغییری.
استفاده از HTTP-only Cookies: با تنظیم فلگ HttpOnly برای کوکیها، از دسترسی جاوااسکریپت به کوکیها جلوگیری کنید، که میتواند خطر CSRF را کاهش دهد.
تایید درخواستهای مهم: برای درخواستهای مهم، مانند تغییرات مالی یا تنظیمات امنیتی، از مکانیسمهای تایید دومرحلهای استفاده کنید.
این آسیبپذیری جدی است که میتواند به صورت موثر امنیت وبسایتها و دادههای کاربران را به خطر بیندازد. پیادهسازی تدابیر امنیتی مناسب و بررسی دقیق درخواستها میتواند به کاهش خطرات ناشی از این نوع حملات کمک کند.
مطلب بعدی: Clickjacking
taha daneshmand