Laravel, одна из самых популярных платформ PHP, обеспечивает встроенную защиту от подделки межсайтовых запросов (CSRF) для обеспечения безопасной разработки веб-приложений. Однако в некоторых случаях вам может потребоваться отключить защиту CSRF для определенных маршрутов. В этой статье мы рассмотрим несколько способов достижения этой цели, а также приведем примеры кода.
Метод 1: исключение маршрутов из промежуточного программного обеспечения VerifyCsrfToken
Один из способов отключить защиту CSRF для определенных маршрутов — исключить их из промежуточного программного обеспечения VerifyCsrfToken. Для этого выполните следующие действия:
Шаг 1. Откройте файл app/Http/Middleware/VerifyCsrfToken.php.
Шаг 2. Найдите свойство protected $exceptи добавьте маршруты, которые вы хотите исключить из защиты CSRF.
Пример:
protected $except = [
'your-route',
'another-route/*',
];
Метод 2: отключение промежуточного программного обеспечения CSRF для групп маршрутов.
Другой подход — отключить защиту CSRF для группы маршрутов с использованием промежуточного программного обеспечения. Вот как этого можно добиться:
Шаг 1. Создайте новый класс промежуточного программного обеспечения (например, DisableCsrfMiddleware) с помощью следующей команды:
php artisan make:middleware DisableCsrfMiddleware
Шаг 2. Откройте файл app/Http/Middleware/DisableCsrfMiddleware.phpи реализуйте метод handle, как показано ниже:
public function handle($request, Closure $next)
{
$request->session()->regenerateToken();
return $next($request);
}
Шаг 3. Зарегистрируйте промежуточное ПО в файле app/Http/Kernel.php, добавив его в массив $routeMiddleware:
protected $routeMiddleware = [
// ...
'disablecsrf' => \App\Http\Middleware\DisableCsrfMiddleware::class,
];
Шаг 4. Примените промежуточное программное обеспечение к нужной группе маршрутов в файле маршрутов:
Route::group(['middleware' => 'disablecsrf'], function () {
// Your routes here
});
Метод 3. Использование метатега исключения токенов CSRF
Вы также можете отключить защиту CSRF для определенных маршрутов с помощью метатега исключения токенов CSRF. Этот метод полезен при работе с платформами на основе JavaScript. Вот как это сделать:
Шаг 1. Откройте файл макета (например, resources/views/layouts/app.blade.php) и добавьте следующий метатег в раздел <head>:
<meta name="csrf-token" content="{{ csrf_token() }}">
Шаг 2. В файле представления конкретного маршрута добавьте следующий код JavaScript, чтобы исключить защиту CSRF:
<script>
// Disable CSRF protection for this specific route
axios.defaults.headers.common['X-CSRF-TOKEN'] = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
</script>
В этой статье мы рассмотрели три различных метода отключения защиты CSRF для определенных маршрутов в Laravel. Исключив маршруты в промежуточном программном обеспечении VerifyCsrfToken, отключив промежуточное программное обеспечение CSRF для групп маршрутов или используя метатег исключения токена CSRF, вы можете настроить защиту CSRF в соответствии с требованиями вашего приложения. Не забывайте использовать эти методы разумно и отключать защиту CSRF только в случае крайней необходимости для обеспечения безопасности вашего веб-приложения Laravel.