Real Time Web Analytics کانال تلگرام لرن روت

Laravel

آموزش جلوگیری از حمله CSRF در لاراول

نویسنده : کامران جعفری
تاریخ انتشار:
19:56:27 1394-06-17
چگونه از حمله CSRF در وب سایت مبتنی بر فریم ورک لاراول جلوگیری کنیم؟


حمله Cross-Site Request Forgery که با نام CSRF شناخته می‌شود جز حملات معمول و شناخته شده مهاجمان و هکرها به وب سایت هاست. فریم ورک محبوب لاراول با طراحی مکانیزمی این موضوع را مدیریت می کند. برای درک بهتر این موضوع با این مقاله‌ی آموزشی لرن روت همراه باشید.


ابتدا بهتر است تا با مکانیزم این نوع از حمله آشنا شویم. همانطور که از اسم آن پیداست این نوع حمله با جعل یک بسته Request اهداف خود را عملی می سازد. اما در نگاهی دقیق تر این عمل چگونه انجام می شود؟ تصور کنید یک مهاجم یا یک هکر یک لینک مخصوص آماده می‌کند که در صورتی که کاربر بر روی آن کلیک نماید به وب سایتی هدایت خواهد شد که قبلا در آن ثبت نام کرده است. پس در این حالت کاربر احراز اصالت شده (از طریق Session یا Cookie) و وارد پروفایل خود می شود. اما این پایان کار نیست و عمل مخرب دقیقا در همین لحظه اتفاق می افتد. این لینک بگونه‌ای طراحی شده که در پایان عمل خاصی را انجام دهد و چون کاربر احراز اصالت شده این اتفاق می‌افتد. پس دستوری که در لینک قرار دارد اجرا شده که می‌تواند شامل بروزرسانی پروفایل کاربر و یا ارسال پیام های Spam باشد.
اما لاراول چگونه این حمله را خنثی می کند؟ 
لاراول از تابعی آماده به نام CSRF استفاده می‌کند تا این حمله اتفاق نیفتد. کاری که این تابع انجام می‌دهد چیزی جز جلوگیری از ارسال بسته های Request نامعتبر و جعلی از سمت هکر نیست. درواقع مهاجم در همان گام نخست ناکام می‌ماند. اما مکانیزم CSRF چیست؟
CSRF با تولید یک token که باید همراه با فرم‌ها ارسال شود این موضوع را مدیریت می‌کند. این token پس از ارسال فرم با یک مقدار دیگری که از قبل در Session کاربر ذخیره شده است مقایسه می شود و در صورتی که این مقدار برابر باشد اجازه ارسال درخواست را صادر می کند.
اکنون برای افزودن این مکانیزم به فرم دو راه وجود دارد:
1.    اگر از تگ HTML برای ساخت فرم استفاده می‌کنید نیاز است تا تگ زیر به فرم اضافه شود:

<input type=”hidden” value=”csrf_token()” />


2.    راه دوم که مناسب تر و بهتر نیز هست استفاده از پکیج آماده LaravelCollective/html است که به صورت خودکار این فیلد را به فرم شما خواهد افزود. نحوه ساخت فرم با استفاده از این پکیج بصورت زیر است:

{!! Form::open() !!}
/*
… other inputs
*/
{!! Form::close() !!}


 

برچسب ها:
مقالات مشابه
ویدیوهای مشابه