Unetway

Laravel - CSRF Защита

Вступление

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

Laravel автоматически генерирует CSRF-токен для каждого активного сеанса пользователя, управляемого приложением. Этот токен используется для проверки того, что аутентифицированный пользователь действительно выполняет запросы к приложению.

Каждый раз, когда вы определяете HTML-форму в своем приложении, вы должны включить в форму скрытое поле токена CSRF, чтобы промежуточное ПО защиты CSRF могло проверить запрос. Вы можете использовать @csrfдирективу Blade для генерации поля токена:

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

VerifyCsrfToken Промежуточный слой , который входит в webгруппе промежуточного слоя, будет автоматически проверять , что маркер на входе запроса совпадает с маркером , хранящимся в сессии.

CSRF токены и JavaScript

При создании приложений, управляемых JavaScript, удобно, чтобы ваша HTTP-библиотека JavaScript автоматически прикрепляла токен CSRF к каждому исходящему запросу. По умолчанию файл регистрирует значение метатега в HTTP-библиотеке Axios. Если вы не используете эту библиотеку, вам придется вручную настроить это поведение для вашего приложения.resources/js/bootstrap.jscsrf-token

 

Исключение URI из защиты CSRF

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

Обычно такие типы маршрутов следует размещать вне группы webпромежуточного программного обеспечения, которая RouteServiceProviderприменяется ко всем маршрутам в файле. Однако вы также можете исключить маршруты, добавив их URI к свойству промежуточного программного обеспечения:routes/web.php$exceptVerifyCsrfToken

<?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-ЗНАК

В дополнение к проверке маркера CSRF в качестве параметра POST, VerifyCsrfTokenпромежуточное программное обеспечение также проверяет заголовок запроса. Например, вы можете сохранить токен в теге HTML :X-CSRF-TOKENmeta

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

Затем, после создания metaтега, вы можете указать библиотеке, например jQuery, автоматически добавлять токен во все заголовки запроса. Это обеспечивает простую и удобную защиту CSRF для ваших приложений на основе AJAX:

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

По умолчанию файл регистрирует значение метатега в HTTP-библиотеке Axios. Если вы не используете эту библиотеку, вам придется вручную настроить это поведение для вашего приложения.resources/js/bootstrap.jscsrf-token

 

X-XSRF-ЗНАК

Laravel сохраняет текущий токен CSRF в файле cookie, который включен в каждый ответ, сгенерированный платформой. Вы можете использовать значение cookie, чтобы установить заголовок запроса.XSRF-TOKENX-XSRF-TOKEN

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