فهرست:

CSRF به حملات Cross Site Forgery به نرم افزار های تحت وب اشاره دارد. و بسیاری از برنامه های وب مستعد این حملات هستند. در این مبحث به چگونگی پیشگیری از حملات CSRF در لاراول می پردازیم. برای استفاده از محافظ CSRF در لاراول، برای هر جلسه کاربر فعال، یک توکن ایجاد می کند. این توکن ها تأیید می کنند که عملیات یا درخواست ها توسط کاربر معتبر مربوطه ارسال شده است یا خیر.

نحوه پیاده سازی محافظ CSRF در لاراول

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

  • CSRF در فرم های HTML در داخل view وب اپلیکیشن تولید شده در لاراول پیاده سازی می شود. شما باید بصورت زیر CSRF را در فرم خود برای تولید یک توکن معتبر قرار دهید، تا لاراول آن را بررسی و اعتبار سنجی نماید.
<form method = "POST" action="/profile">
   {{ csrf_field() }}
   ...
</form>
  • شما می توانید با استفاده از کتابخانه JavaScript HTTP به راحتی برنامه های مبتنی بر جاوا اسکریپت  ایجاد کنید و توکن CSRF متناسب برای هر درخواست خروجی ایجاد می گردد.
  • این پرونده resources/assets/js/bootstrap.js با کمک کتابخانه Axios HTTP از csrf-token پشتیبانی می کند.

فرم بدون استفاده از توکن محافظ CSRF

برای درک بهتر اهمیت استفاده از CSRF مثال زیر را در نظر بگیرید که در آن فرمی با دو فیلد ایمیل و پیغام به عنوان ورودی وجود دارد.

<form>
   <label> Email </label>
      <input type = "text" name = "email"/>
      <br/>
   <label> Message </label> <input type="text" name = "message"/>
   <input type = ”submit” name = ”submitButton” value = ”submit”>
</form>
فرم تعریف شده در بالا ، هرگونه اطلاعات ورودی از یک کاربر مجاز را می پذیرد و این ممکن است برنامه وب را در معرض حملات مختلف قرار دهد. لطفا توجه داشته باشید دکمه ارسال فرم بالا بدون هیچ پیش شرطی به کنترلر مربوطه ارجا شده و تابع postContact در کنترلر به View های مرتبط با آن بصورت زیر تعریف شده است.
public function postContact(Request $request) {
   return $request-> all();
}
در مثال بالا همان گونه که مشاهده می کنید فرم شامل هیچ محافظ CSRF نمی باشد و اطلاعات حساس فرم به عنوان فیلد های ورودی در معرض حملات مختلف می باشند.

فرم همراه با توکن محافظ CSRF

حال بیاید فرم بالا را با استفاده توکن محافظ CSRF بصورت زیر در نظر داشته باشید.

<form method = ”post” >
   {{ csrf_field() }}
   <label> Email </label>
   <input type = "text" name = "email"/>
   <br/>
   <label> Message </label>
   <input type = "text" name = "message"/>
   <input type = ”submit” name = ”submitButton” value = ”submit”>
</form>
همانگونه که در خروجی کد بالا مشاهده می شود JSON مربوط به توکن بالا با کدی نظیر کد زیر تولید می شود و این JSON بعد از ارسال از سمت فرم به لاراول اعتبار سنجی خواهد شد.
{
   "token": "ghfleifxDSUCLASSYEW9WE67877CX",
   "name": "Uclass",
   "email": "contact@yoursite.com"
}