CSRF یک فعالیت مخرب است که توسط یک مهاجم انجام می شود، که اقداماتی را از طرف یک کاربر تأیید شده انجام می دهد که برای امنیت وب مضر است. خوشبختانه لاراول ابزارهایی را برای جلوگیری از این نوع آسیب پذیری ارائه می دهد.
حملات CSRF جلسات کاربر را ربوده است. آنها این کار را با فریب دادن کاربر برای ارسال درخواست از طریق برچسب های فرم مخفی یا URL های مخرب (تصاویر یا پیوندها) بدون اطلاع کاربر انجام می دهند.
این حمله منجر به تغییر در وضعیت جلسه کاربر، نشت داده ها می شود و گاهی اوقات هکرها می توانند داده های کاربر نهایی را در یک برنامه دستکاری کنند.
تصویر بالا سناریویی را نشان می دهد که در آن امنیت وب نقض شده است. قربانی با کلیک بر روی یک پیوند (دریافت شده)، درخواستی را به سرور وب سایت ارسال می کند که اثرات مورد نظر هکر را ایجاد می کند که اطلاعات مفید برای دسترسی و دستکاری سرور وب سایت را در اختیار دارد.
برای بهبود امنیت وب اپلیکیشن های شما، در هر جلسه کاربر، لاراول توکن های امنی تولید می کند که از آنها برای اطمینان از اینکه کاربر احراز هویت شده درخواست کننده برنامه است، استفاده می کند.
از آنجا که این توکن هر بار که یک جلسه کاربر بازسازی می شود تغییر می کند، مهاجم نمی تواند به آن دسترسی داشته باشد.
هر زمان که درخواست تغییر اطلاعات کاربر در سمت سرور (بکاند) مانند POST
, PUT
, PATCH
e DELETE
، باید بخشنامه را وارد کنید @csrf
در فرم درخواست blade
HTML. را @csrf
بنابراین یک بخشنامه است Blade
برای تولید یک توکن مخفی تایید شده توسط برنامه استفاده می شود.
بخشنامه Blade
سینتکسی است که در موتور قالب لاراول استفاده می شود تیغه . برای ایجاد یک فایل blade
شما باید به آن یک نام بدهید - به شکل موردی ما - به دنبال گسترش تیغه. این به این معنی است که فایل دارای نام خواهد بود form.blade.php
.
فایل استفاده می شود blade
برای ارائه نماها برای کاربران در صفحه وب. چند دستورالعمل از قبل وجود داردdefiمی توانید از نحو مختصر nite یا blade استفاده کنید. مثلا، @if
بررسی کنید که آیا یک شرط برآورده شده است، @empty
بررسی کنید که آیا سوابق خالی نیستند، @auth
بررسی کنید که آیا یک کاربر احراز هویت شده است و غیره.
اما به بخشنامه برگردیم @csrf
. در اینجا نحوه استفاده از آن آمده است:
<form method="POST" action="{{route('pay')}}">
@csrf
</form>
نسخه های قبلی لاراول تنظیمات متفاوتی داشتند: هم کار می کنند و هم یک کار را انجام می دهند.
<form method="POST" action="{{route('pay')}}">
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>
هنگامی که توکن CSRF در درخواست فرم ارسال شده وجود ندارد یا اگر نامعتبر به نظر برسد، لاراول یک پیغام خطای "Page Expired" با کد وضعیت 419 ارسال می کند.
میان افزار VerifyCsrfToken
تأیید CSRF را در برنامه لاراول انجام می دهد. را middleware
ثبت شده است در Kernel.php
و در دایرکتوری قرار دارد app/Http/Middleware
. این بدان معنی است که middleware
برای درخواست های داخل وب، غیر مرتبط با API ها، راه اندازی می شود.
protected $middlewareGroups = [
'web' => [
.
.
.
.
.
\App\Http\Middleware\VerifyCsrfToken::class,
],
];
میان افزار VerifyCsrfToken کلاس را گسترش می دهد Illuminate\Foundation\Http\Middleware\VerifyCsrfToken
، یعنی تأیید CSRF است defiداخل کلاس درس
بیایید عمیقتر بگردیم تا بفهمیم لاراول چگونه تأیید CSRF را مدیریت میکند.
در داخل کلاس، تابع را داریم tokensMatch
.
protected function tokensMatch($request)
{
$token = $this->getTokenFromRequest($request);
return is_string($request->session()->token()) &&
is_string($token) &&
hash_equals($request->session()->token(), $token);
}
در کد تعیین می کند که آیا جلسه و توکن های ورودی CSRF مطابقت دارند یا خیر.
تابع دو کار انجام می دهد:
$this->getTokenFromRequest
توکن درخواست ورودی که از طریق یک فیلد مخفی یا هدر درخواست پیوست شده است. رمز رمزگشایی شده و سپس به متغیر توکن بازگردانده می شود.protected function getTokenFromRequest($request)
{
$token = $request->input('_token') ?: $request->header('X-CSRF-TOKEN');
if (! $token && $header = $request->header('X-XSRF-TOKEN')) {
try {
$token = CookieValuePrefix::remove($this->encrypter->decrypt($header, static::serialized()));
} catch (DecryptException $e) {
$token = '';
}
}
return $token;
}
در کد از هدر توکن می گیرد
2. هم توکن درخواست و هم جلسه را به یک رشته ارسال کنید و سپس استفاده کنید hash_equals
ساخته شده در PHP برای مقایسه اگر هر دو رشته برابر هستند. نتیجه این عملیات همیشه است bool (درست) یا (نادرست) .
Ercole Palmeri
بخش دریایی یک قدرت واقعی اقتصادی جهانی است که به سمت یک بازار 150 میلیاردی حرکت کرده است.
دوشنبه گذشته، فایننشال تایمز از قراردادی با OpenAI خبر داد. FT مجوز روزنامه نگاری در سطح جهانی خود را صادر می کند…
میلیونها نفر برای خدمات استریم پرداخت میکنند و هزینه اشتراک ماهانه میپردازند. این عقیده رایج است که شما…
Coveware توسط Veeam به ارائه خدمات پاسخگویی به حوادث اخاذی سایبری ادامه خواهد داد. Coveware قابلیتهای پزشکی قانونی و اصلاحی را ارائه میدهد…