Вступление
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.js
csrf-token
Исключение URI из защиты CSRF
Иногда вы можете захотеть исключить набор URI из защиты CSRF. Например, если вы используете Stripe для обработки платежей и используете их систему webhook, вам нужно будет исключить маршрут обработчика веб-крюков Stripe из защиты CSRF, поскольку Stripe не будет знать, какой токен CSRF отправлять на ваши маршруты.
Обычно такие типы маршрутов следует размещать вне группы web
промежуточного программного обеспечения, которая RouteServiceProvider
применяется ко всем маршрутам в файле. Однако вы также можете исключить маршруты, добавив их URI к свойству промежуточного программного обеспечения:routes/web.php
$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-ЗНАК
В дополнение к проверке маркера CSRF в качестве параметра POST, VerifyCsrfToken
промежуточное программное обеспечение также проверяет заголовок запроса. Например, вы можете сохранить токен в теге HTML :X-CSRF-TOKEN
meta
<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.js
csrf-token
X-XSRF-ЗНАК
Laravel сохраняет текущий токен CSRF в файле cookie, который включен в каждый ответ, сгенерированный платформой. Вы можете использовать значение cookie, чтобы установить заголовок запроса.XSRF-TOKEN
X-XSRF-TOKEN
Этот файл cookie в основном отправляется для удобства, поскольку некоторые фреймворки и библиотеки JavaScript, такие как Angular и Axios, автоматически помещают его значение в заголовок.X-XSRF-TOKEN
0 комментариев