حمله CSRF چیست

حمله CSRF زمانی اتفاق می‌افتد که یک عامل مخرب مانند یک وب‌سایت آلوده، ایمیل، وبلاگ، پیام فوری یا برنامه مخرب، مرورگر وب کاربر احراز هویت شده را فریب دهد تا اقدامی ناخواسته را در یک سایت مورد اعتماد انجام دهد. سایت های هدف محافظت نشده نمی توانند بین درخواست های مجاز قانونی و درخواست های احراز هویت جعلی تمایز قائل شوند.

از آنجایی که درخواست‌های مرورگر به طور خودکار شامل همه کوکی‌ها از جمله کوکی‌های جلسه می‌شود، امکان حمله CSRF تا زمانی که از یک مجوز مناسب استفاده شود ، وجود دارد. به این معنی که مکانیسم چالش-پاسخ سایت هدف ، هویت و اعتبار فرد درخواست‌کننده را تأیید نمی‌کند. در واقع، حملات CSRF یک سیستم هدف را وادار می کند تا عملکردهای مشخص شده توسط مهاجم را از طریق مرورگر قربانی بدون اطلاع قربانی انجام دهد (معمولاً تا زمانی که اقدامات غیرمجاز انجام شده باشد).

به عنوان مثال قربانی با کلیک بروی پیوندی باعث اجرا کردن یک اسکریپت مخرب می شود و در نتیجه آدرس ایمیل او بصورت ناخواسه عوض شده است

معمولاً در حمله CSRF ، هکرها از کوکی‌های مرورگر یا پارامترهای URL برای انجام درخواست‌های تقلبی استفاده می‌کنند. این درخواست‌ها می تواند عملیات حذف، ویرایش یا افزودن داده‌ها را در سایت هدف انجام دهند و همینطور منجر به خسارت جدی و نقض امنیت سایت شوند.

با این حال، حملات موفقیت آمیز CSRF فقط می توانند از قابلیت های در معرض دید که توسط برنامه آسیب پذیر و امتیازات کاربر مشخص می شوند، سوء استفاده کنند. بسته به اعتبار کاربر، مهاجم می‌تواند وجوه را انتقال دهد، رمز عبور را تغییر دهد، خرید غیرمجاز انجام دهد، امتیازات یک حساب هدف را افزایش دهد یا هر اقدامی را که کاربر مجاز به انجام آن است انجام دهد.

دفاع در برابر CSRF

به یاد داشته باشید که اسکریپت بین سایتی (XSS) می تواند تمام تکنیک های کاهش CSRF را شکست دهد!

ابتدا بررسی کنید که آیا فریمورک شما دارای محافظ CSRF داخلی است و از آن استفاده کنید .
اگر فریم ورک دارای حفاظت داخلی CSRF نیست، توکن‌های CSRF را به همه درخواست‌های تغییر وضعیت (درخواست‌هایی که باعث تغییراتی در سایت می‌شوند) اضافه کنید و آنها را در backend تأیید کنید.
نرم افزار Stateful باید از الگوی توکن همگام ساز استفاده کند
نرم افزار Stateless باید از کوکی های ارسال دوبل استفاده کند.
اگر سایت مبتنی بر API نمی‌تواند از تگ‌های <form> استفاده کند، از هدرهای درخواست سفارشی استفاده کنید.

حداقل یک کاهش از بخش دفاع در عمق اعمال کنید.

SameSite Cookie Attribute را می توان برای کوکی های جلسه استفاده کرد، اما مراقب باشید که کوکی را به طور خاص برای دامنه تنظیم نکنید. این اقدام یک آسیب‌پذیری امنیتی را معرفی می‌کند زیرا همه زیر دامنه‌های آن دامنه کوکی را به اشتراک می‌گذارند، و این مسئله به‌ویژه اگر یک زیر دامنه دارای CNAME برای دامنه‌هایی باشد که تحت کنترل شما نیستند، مشکل ساز است.
اجرای حفاظت مبتنی بر تعامل کاربر را برای عملیات بسیار حساس در نظر بگیرید
بررسی مبدا با سرصفحه های استاندارد را در نظر بگیرید
از درخواست های GET برای عملیات تغییر حالت استفاده نکنید.
اگر به هر دلیلی این کار را انجام دادید، از آن منابع در برابر CSRF محافظت کنید