Версія фреймворка: 8.x

Захист CSRF

Вступ

Laravel дозволяє легко захистити вашу програму відміжсайтовий підробку запиту(CSRF) атаки. Підроблені міжсайтові запити - це різновид зловмисного використання, за допомогою якого несанкціоновані команди виконуються від імені автентифікованого користувача.

Laravel автоматично генерує "маркер" CSRF для кожного активного сеансу користувача, керованого додатком. Цей маркер використовується для перевірки того, що автентифікований користувач є тим, хто насправді робить запити до програми.

Кожного разу, коли ви визначаєте форму HTML у своїй програмі, ви повинні включити приховане поле маркера CSRF у форму, щоб Middleware захисту CSRF могло перевірити запит. Ви можете використовувати@csrfДиректива Blade для створення поля маркера:

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

VerifyCsrfTokenMiddleware, що входить доwebгрупа проміжного програмного забезпечення, автоматично перевірить, що маркер у введеному запиті відповідає маркеру, що зберігається в сеансі.

CSRF токени та JavaScript

При створенні програм, керованих JavaScript, зручно мати, щоб ваша HTTP-бібліотека JavaScript автоматично приєднувала маркер CSRF до кожного вихідного запиту. За замовчуванням бібліотека Axios HTTP, надана вresources/js/bootstrap.jsфайл автоматично надсилає файлX-XSRF-TOKENзаголовок, використовуючи значення зашифрованогоXSRF-TOKEN cookie. If you are not using this library, you will need to manually configure this behavior for your application.

Виключення URI із захисту CSRF

Іноді вам може знадобитися виключити набір URI із захисту CSRF. Наприклад, якщо ви використовуєтеСмугадля обробки платежів і використання їх системи webhook вам потрібно буде виключити ваш маршрут обробника веб-хука із захисту CSRF, оскільки Stripe не знатиме, який маркер CSRF надсилати на ваші маршрути.

Як правило, ви повинні розміщувати такі маршрути за межамиwebMiddleware, якеRouteServiceProviderстосується всіх маршрутів уroutes/web.phpфайл. Однак ви можете також виключити маршрути, додавши їх URI до$except property of the VerifyCsrfTokenMiddleware:

<?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/*',
    ];
}
Middleware CSRF автоматично вимикається, колизапущені тести.

X-CSRF-TOKEN

На додаток до перевірки маркера CSRF як параметра POST, файлVerifyCsrfTokenMiddleware також перевірить наявністьX-CSRF-TOKENзаголовок запиту. Наприклад, ви можете зберегти маркер у HTMLmetaтег:

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

Потім, як тільки ви створилиmetaтегу, ви можете доручити бібліотеці, як jQuery, автоматично додавати маркер до всіх заголовків запиту. Це забезпечує простий, зручний захист CSRF для ваших програм на базі AJAX:

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

X-XSRF-ЛОКЕН

Laravel stores the current CSRF token in an encrypted XSRF-TOKENcookie, який включений до кожної відповіді, сформованої фреймворком. Ви можете використовувати значення cookie, щоб встановитиX-XSRF-TOKENзаголовок запиту.

Цей файл cookie в основному надсилається для зручності, оскільки деякі фреймворки та бібліотеки JavaScript, такі як Angular та Axios, автоматично розміщують своє значення вX-XSRF-TOKENзаголовок на запити того самого походження.

За замовчуваннямresources/js/bootstrap.jsФайл містить бібліотеку Axios HTTP, яка автоматично надішле це для вас.