CSRF Token چیست

منظور از Cross-Site Request Forgery یا به اختصار CSRF نوعی از حملات هکرها است که در آن با ارسال درخواست های غیر واقعی به وب سایت و اجرای آن در سمت کاربر میتوانند عمل نفوذ به حساب قربانی را انجام دهند. با یک مثال این موضوع را بیشتر شرح می دهیم. در این مثال وب سایت codebox.ir یک سامانه مالی می باشد که در آدرس codebox.ir/pay.php فرمی برای پرداخت به شماره حساب کاربر دیگر طراحی شده است. پس از تکمیل و ارسال این فرم کاربر اعتبار از حساب کاربر کسر و به حساب مقصد واریز می گردد.

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


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

مقابله با حملات CSRF

متدهای مختفی جهت مقابله یا بهتر است گفت رفع آسیب پذیری وب سایت در مقابل حملات CSRF وجود دارد که متداول ترین آنها به این شرح است:

  • استفاده از متد Post به جای متد GET
  • پرهیز از استفاده از Register_global در صفحات پردازشگر
  • استفاده از Captcha در فرم ها
  • گرفتن تائید مجدد پس از ارسال یک فرم از کاربر برای انجام فرایند ها
  • بررسی و تائید Header صادر کننده درخواست از نظر یکسان بودن با صفحه واقعی
  • ایجاد متغیرهای تصادفی در سمت سرور و باز پس گیری آن از طرف کاربر در زمان ارسال هر فرم
  • دیگر روش ها

فریمورک های مدرن از متد های مختلف جهت جلوگیری از حملات CSRF استفاده می کنند، که یکی از موثرترین متدها ایجاد CSRF Token می باشد. نوبت آن شد که شرح دهیم CSRF Token چیست. در این شیوه متناظر با فعالیت کاربر یک توکن که ممکن است وابستگی به IP کاربر، ساعت سیستم یا ساعت سرور و دیگر عوامل داشته باشد جنریت شده و در صفحاتی که کاربر از سمت سرور دریافت می کند این توکن به کاربر تحویل داده می شود. از طرف دیگر توکن در سمت سرور نیز در دیتابیس یا به صورت باز تولیدی موجود است.

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

البته توصیه می شود که همواره از چند روش مختلف جهت جلوگیری از حملات CSRF استفاده گردد تا بهترین سطح امنیت از این منظر تامین شود. چنان که استفاده از یک شیوه به تنهایی ممکن است راه های گریزی برای هکر فراهم آورد.

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

لطفا اگر این مطلب را مفید دانستید و قصد بازنشر آن را داشتید به این صفحه با عنوان زیر لینک بدهید:

CSRF Token چیست