فهرست:
CSRF
به حملات Cross Site Forgery به نرم افزار های تحت وب اشاره دارد. و بسیاری از برنامه های وب مستعد این حملات هستند. در این مبحث به چگونگی پیشگیری از حملات CSRF
در لاراول می پردازیم. برای استفاده از محافظ CSRF
در لاراول، برای هر جلسه کاربر فعال، یک توکن ایجاد می کند. این توکن ها تأیید می کنند که عملیات یا درخواست ها توسط کاربر معتبر مربوطه ارسال شده است یا خیر.
نحوه پیاده سازی محافظ CSRF در لاراول
نحوه اجرای حفاظت CSRF
در لاراول در این بخش به طور مفصل مورد بررسی قرار گرفته است. لازم است نکات زیر قبل از استفاده از محافظت از CSRF
مورد توجه قرار گیرد.
CSRF
در فرم هایHTML
در داخلview
وب اپلیکیشن تولید شده در لاراول پیاده سازی می شود. شما باید بصورت زیرCSRF
را در فرم خود برای تولید یک توکن معتبر قرار دهید، تا لاراول آن را بررسی و اعتبار سنجی نماید.
[pastacode lang=”markup” manual=”%3Cform%20method%20%3D%20%22POST%22%20action%3D%22%2Fprofile%22%3E%0A%20%20%20%7B%7B%20csrf_field()%20%7D%7D%0A%20%20%20…%0A%3C%2Fform%3E” message=”” highlight=”” provider=”manual”/]
- شما می توانید با استفاده از کتابخانه JavaScript HTTP به راحتی برنامه های مبتنی بر جاوا اسکریپت ایجاد کنید و توکن
CSRF
متناسب برای هر درخواست خروجی ایجاد می گردد. - این پرونده
resources/assets/js/bootstrap.js
با کمک کتابخانهAxios HTTP
از csrf-token پشتیبانی می کند.
فرم بدون استفاده از توکن محافظ CSRF
برای درک بهتر اهمیت استفاده از CSRF
مثال زیر را در نظر بگیرید که در آن فرمی با دو فیلد ایمیل و پیغام به عنوان ورودی وجود دارد. [pastacode lang=”markup” manual=”%3Cform%3E%0A%20%20%20%3Clabel%3E%20Email%20%3C%2Flabel%3E%0A%20%20%20%20%20%20%3Cinput%20type%20%3D%20%22text%22%20name%20%3D%20%22email%22%2F%3E%0A%20%20%20%20%20%20%3Cbr%2F%3E%0A%20%20%20%3Clabel%3E%20Message%20%3C%2Flabel%3E%20%3Cinput%20type%3D%22text%22%20name%20%3D%20%22message%22%2F%3E%0A%20%20%20%3Cinput%20type%20%3D%20%E2%80%9Dsubmit%E2%80%9D%20name%20%3D%20%E2%80%9DsubmitButton%E2%80%9D%20value%20%3D%20%E2%80%9Dsubmit%E2%80%9D%3E%0A%3C%2Fform%3E” message=”” highlight=”” provider=”manual”/] فرم تعریف شده در بالا ، هرگونه اطلاعات ورودی از یک کاربر مجاز را می پذیرد و این ممکن است برنامه وب را در معرض حملات مختلف قرار دهد. لطفا توجه داشته باشید دکمه ارسال فرم بالا بدون هیچ پیش شرطی به کنترلر مربوطه ارجا شده و تابع postContact
در کنترلر به View های مرتبط با آن بصورت زیر تعریف شده است. [pastacode lang=”php” manual=”public%20function%20postContact(Request%20%24request)%20%7B%0A%20%20%20return%20%24request-%3E%20all()%3B%0A%7D” message=”” highlight=”” provider=”manual”/] در مثال بالا همان گونه که مشاهده می کنید فرم شامل هیچ محافظ CSRF
نمی باشد و اطلاعات حساس فرم به عنوان فیلد های ورودی در معرض حملات مختلف می باشند.
فرم همراه با توکن محافظ CSRF
حال بیاید فرم بالا را با استفاده توکن محافظ CSRF
بصورت زیر در نظر داشته باشید. [pastacode lang=”markup” manual=”%3Cform%20method%20%3D%20%E2%80%9Dpost%E2%80%9D%20%3E%0A%20%20%20%7B%7B%20csrf_field()%20%7D%7D%0A%20%20%20%3Clabel%3E%20Email%20%3C%2Flabel%3E%0A%20%20%20%3Cinput%20type%20%3D%20%22text%22%20name%20%3D%20%22email%22%2F%3E%0A%20%20%20%3Cbr%2F%3E%0A%20%20%20%3Clabel%3E%20Message%20%3C%2Flabel%3E%0A%20%20%20%3Cinput%20type%20%3D%20%22text%22%20name%20%3D%20%22message%22%2F%3E%0A%20%20%20%3Cinput%20type%20%3D%20%E2%80%9Dsubmit%E2%80%9D%20name%20%3D%20%E2%80%9DsubmitButton%E2%80%9D%20value%20%3D%20%E2%80%9Dsubmit%E2%80%9D%3E%0A%3C%2Fform%3E” message=”” highlight=”” provider=”manual”/] همانگونه که در خروجی کد بالا مشاهده می شود JSON مربوط به توکن بالا با کدی نظیر کد زیر تولید می شود و این JSON بعد از ارسال از سمت فرم به لاراول اعتبار سنجی خواهد شد. [pastacode lang=”php” manual=”%7B%0A%20%20%20%22token%22%3A%20%22ghfleifxDSUCLASSYEW9WE67877CX%22%2C%0A%20%20%20%22name%22%3A%20%22Uclass%22%2C%0A%20%20%20%22email%22%3A%20%22contact%40yoursite.com%22%0A%7D” message=”” highlight=”” provider=”manual”/]