نسخه:

حفاظت CSRF

معرفی

لاراول محافظت از برنامه شما را در برابر حملات جعل درخواست بین سایتی (CSRF) آسان می کند. جعل درخواست های بین سایتی نوعی سوء استفاده مخرب است که به موجب آن دستورات غیرمجاز از طرف یک کاربر احراز هویت شده انجام می شود.

لاراول برای هر جلسه کاربر فعال که توسط برنامه مدیریت می شود، به طور خودکار یک "توکن" CSRF تولید می کند. این نشانه برای تأیید اینکه کاربر احراز هویت شده کسی است که واقعاً درخواست ها را به برنامه ارسال می کند استفاده می شود.

هر زمان که یک فرم HTML را در برنامه خود تعریف می کنید، باید یک فیلد رمز پنهان CSRF را در فرم قرار دهید تا میان افزار حفاظت CSRF بتواند درخواست را تأیید کند. می توانید از @csrf دستورالعمل Blade برای تولید فیلد نشانه استفاده کنید:

<form method="POST" action="/profile">
@csrf
...
</form>

میان‌افزار ، که در گروه میان‌افزار قرار دارد ، VerifyCsrfToken به‌طور web خودکار تأیید می‌کند که نشانه موجود در ورودی درخواست با توکن ذخیره‌شده در جلسه مطابقت دارد.

توکن‌های CSRF و جاوا اسکریپت

هنگام ساخت برنامه های کاربردی مبتنی بر جاوا اسکریپت، راحت است که کتابخانه HTTP جاوا اسکریپت خود را به طور خودکار رمز CSRF را به هر درخواست خروجی متصل کنید. به‌طور پیش‌فرض، کتابخانه HTTP Axios ارائه‌شده در resources/js/bootstrap.js فایل به‌طور خودکار یک X-XSRF-TOKEN هدر را با استفاده از مقدار XSRF-TOKEN کوکی رمزگذاری‌شده ارسال می‌کند. اگر از این کتابخانه استفاده نمی کنید، باید به صورت دستی این رفتار را برای برنامه خود پیکربندی کنید.

مستثنی کردن URI ها از حفاظت CSRF

گاهی اوقات ممکن است بخواهید مجموعه ای از URI ها را از حفاظت CSRF حذف کنید. به عنوان مثال، اگر از Stripe برای پردازش پرداخت‌ها استفاده می‌کنید و از سیستم webhook آن‌ها استفاده می‌کنید، باید مسیر کنترلر Stripe webhook خود را از حفاظت CSRF حذف کنید، زیرا Stripe نمی‌داند چه توکن CSRF را به مسیرهای شما ارسال کند.

به طور معمول، شما باید این نوع مسیرها را خارج از web گروه میان افزار قرار دهید که RouteServiceProvider برای همه مسیرهای موجود در routes/web.php فایل اعمال می شود. با این حال، می‌توانید مسیرها را با اضافه کردن URI آنها به $except ویژگی میان‌افزار حذف کنید VerifyCsrfToken :

<?php
 
namespace App\Http\Middleware;
 
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
 
class VerifyCsrfToken extends Middleware
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'stripe/*',
'http://example.com/foo/bar',
'http://example.com/foo/*',
];
}

میان‌افزار CSRF به‌طور خودکار هنگام اجرای آزمایش‌ها غیرفعال می‌شود .

X-CSRF-TOKEN

علاوه بر بررسی توکن CSRF به عنوان پارامتر POST، VerifyCsrfToken میان افزار هدر درخواست را نیز بررسی می کند X-CSRF-TOKEN . به عنوان مثال می توانید توکن را در یک meta تگ HTML ذخیره کنید:

<meta name="csrf-token" content="{{ csrf_token() }}">

سپس، هنگامی که تگ را ایجاد کردید meta ، می توانید به کتابخانه ای مانند jQuery دستور دهید تا توکن را به صورت خودکار به تمام سرصفحه های درخواست اضافه کند. این حفاظت CSRF ساده و راحت را برای برنامه های مبتنی بر AJAX شما فراهم می کند:

$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});

X-XSRF-TOKEN

لاراول توکن CSRF فعلی را در یک XSRF-TOKEN کوکی رمزگذاری شده ذخیره می کند که با هر پاسخ تولید شده توسط فریم ورک گنجانده شده است. می توانید از مقدار کوکی برای تنظیم X-XSRF-TOKEN هدر درخواست استفاده کنید.

این کوکی عمدتاً به عنوان یک راحتی ارسال می‌شود، زیرا برخی از چارچوب‌ها و کتابخانه‌های جاوا اسکریپت، مانند Angular و Axios، به‌طور خودکار مقدار آن را در هدر X-XSRF-TOKEN در درخواست‌های با منبع یکسان قرار می‌دهند.

به طور پیش فرض، resources/js/bootstrap.js فایل شامل کتابخانه Axios HTTP است که به طور خودکار این را برای شما ارسال می کند.