РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
519 of 1392 menu

Middleware ValidateCsrfToken

Middleware ValidateCsrfToken автоматически проверяет каждый POST, PUT, PATCH или DELETE запрос на наличие CSRF-токена в заголовке или теле запроса. Если токен отсутствует или не совпадает с токеном сессии, middleware возвращает ответ с ошибкой 419 (Page Expired). Проверка выполняется для всех маршрутов, кроме тех, которые явно исключены в свойстве $except.

Расположение

Middleware находится в файле:

<?php namespace App\Http\Middleware; use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware; class ValidateCsrfToken extends Middleware { /** * The URIs that should be excluded from CSRF verification. * * @var array<int, string> */ protected $except = [ // ]; }

Синтаксис

<?php class ValidateCsrfToken extends Middleware { protected $except = [ 'api/*', 'webhook/*', ]; }

Регистрация middleware

Middleware уже зарегистрирован в ядре HTTP по умолчанию. Его можно найти в файле:

<?php namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel { /** * The application's global HTTP middleware stack. * * @var array<int, class-string|string> */ protected $middleware = [ // ... \App\Http\Middleware\ValidateCsrfToken::class, // ... ]; }

Пример исключения маршрутов

Давайте исключим все маршруты, начинающиеся с api и webhook, чтобы не проверять CSRF-токен для внешних сервисов:

<?php namespace App\Http\Middleware; use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware; class ValidateCsrfToken extends Middleware { protected $except = [ 'api/*', 'webhook/*', 'payment/callback', ]; }

Пример использования в форме

Для отправки POST-запроса необходимо добавить CSRF-токен в HTML-форму с помощью директивы @csrf:

<form method="POST" action="/submit"> @csrf <input type="text" name="name" placeholder="Enter name"> <button type="submit">Submit</button> </form>

Пример проверки токена в JavaScript

При отправке AJAX-запросов токен можно передавать в заголовке X-CSRF-TOKEN:

<meta name="csrf-token" content="{{ csrf_token() }}"> <script> const token = document.querySelector('meta[name="csrf-token"]').content; fetch('/api/data', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRF-TOKEN': token }, body: JSON.stringify({ key: 'value' }) }); </script>

Пример обработки ошибки

При неверном или отсутствующем токене middleware автоматически возвращает ответ 419:

<?php use Illuminate\Support\Facades\Route; Route::post('/submit', function () { return 'Form submitted successfully'; });

Результат выполнения кода при отправке запроса без токена:

"419 Page Expired"

Пример отключения для конкретных маршрутов

Иногда требуется отключить проверку CSRF для отдельных маршрутов через свойство $except в классе middleware:

<?php namespace App\Http\Middleware; use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware; class ValidateCsrfToken extends Middleware { protected $except = [ 'api/webhook', 'payment/success', 'payment/cancel', ]; }

Смотрите также

  • метод handle,
    который обрабатывает входящий запрос в middleware
  • метод terminate,
    который выполняется после отправки ответа клиенту
  • класс EncryptCookies,
    который шифрует и расшифровывает куки
  • класс TrimStrings,
    который обрезает пробелы во входящих данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить