CSRF Protection چیست؟
لاراول یک راه حل آسان با عنوان CSRF Protection برای محافظت از برنامه شما در برابر حملات جعلی پیش بینی کرده است. جعل درخواست های متقابل سایت نوعی سوءاستفاده مخرب است که به موجب آن دستورات غیرمجاز به نمایندگی از یک کاربر معتبر انجام می شود.
لاراول به طور خودکار یک توکن CSRF برای هر session ایجاد می کند از این توکن استفاده می شود تا تأیید کند کاربر معتبر شخصی است که در واقع درخواست های برنامه را انجام می دهد.
هر زمانی که شما یک فرم HTML در سایت (برنامه) خود ایجاد می کنید شما باید توکن CSRF را به فرم خود اضافه کنید تا middleware هایی که برای اعتبار سنجی درخواست های کاربران از قبل در لاراول موجود می باشند بتوانند عمل اعتبارسنجی را انجام دهند برای ایجاد این توکن در فرم های ساخته شده در blade ها باید توکن CSRF را به فرم خود اضافه کنید
@csrf // روش اول
{{ csrf_field() }} // روش دوم
مثال در بدنه فرم
@csrf
میدل ویر VerifyCsrfToken که در گروه middleware های web می باشد به طور خودکار تأیید می کند که توکن موجود در ورودی درخواست با توکن ذخیره شده در session مطابقت دارد.
CSRF Tokens & JavaScript
در درخواست ها از سرور با javascript (کتابخانه های مختلف javascript مثل jquery و ... ) شما باید توکن CSRF را به درخواست های خود اضافه کنید به طور پیش فرض ، کتابخانه Axios HTTP موجود در پرونده resources/js/bootstrap.js بطور خودکار یک هدر X-XSRF-TOKEN را با استفاده از مقدار کوکی رمزگذاری شده XSRF-TOKEN می فرستد. اگر از این کتابخانه استفاده نمی کنید ، لازم است این رفتار را برای برنامه خود به صورت دستی پیکربندی کنید.
Excluding URIs From CSRF Protection
بعضی اوقات ممکن است بخواهید مجموعه ای از URI ها را از حمایت CSRF محروم کنید. به طور معمول ، شما باید این نوع مسیرها را در خارج از گروه میان افزار وب قرار دهید که RouteServiceProvider برای کلیه مسیرها در پرونده مسیر routes/web.php اعمال می کند. با این حال ، شما همچنین می توانید مسیرها را با اضافه کردن URI های آنها به بخش $except در میدل ویر VerifyCsrfToken رد کنید:
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
protected $except = [
'http://example.com/foo/bar',
'http://example.com/foo/*',
];
}
نکته : میدل ویر VerifyCsrfToken در هنگام اجرای تست، خودکار غیرفعال می شود.
X-CSRF-TOKEN
علاوه بر چک کردن توکن CSRF به عنوان یک پارامتر در درخواست ها به صورت POST، میدل ویر VerifyCsrfToken در درخواست های شما هدر X-CSRF-TOKEN را نیز چک می کند برای ارسال هدر X-CSRF-TOKEN باید csrf_token به صورت یک تگ meta در صفحه شما موجود باشد.
<meta name="csrf-token" content="ZkLtejbXn5UvuiAEWC0er2XamrzsrwcSGxfxHokt">
سپس ، پس از ایجاد برچسب متا ، می توانید به کتابخانه ای مانند jQuery دستور دهید تا به طور خودکار این توکن را به همه هدرهای درخواست اضافه کند. این محافظت ساده و راحت CSRF را برای برنامه های مبتنی بر AJAX شما فراهم می کند:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
X-XSRF-TOKEN
Laravel توکن CSRF فعلی را در یک کوکی رمزگذاری شده XSRF-TOKEN ذخیره می کند که با هر پاسخ تولید شده توسط این فریم ورک درج شده است. می توانید از مقدار کوکی برای تنظیم عنوان درخواست X-XSRF-TOKEN استفاده کنید.
این کوکی به راحتی می تواند توسط برخی از فریم ورک ها و کتابخانه های جاوا اسکریپت مورد استفاده قرار می گیرد مانند Angular و Axios ، که به طور خودکار مقدار خود را در عنوان X-XSRF-TOKEN در درخواستهای همان مبدا قرار می دهند. به طور پیش فرض ، پرونده resources/js/bootstrap.js شامل کتابخانه Axios HTTP است که بطور خودکار این مورد را برای شما ارسال می کند.
مطالعه بیشتر: فریمورک چیست؟