Изменение кода ответа HTTP CSRF Failure в Laravel

Мы используем встроенную в CSRF защиту Laravel 5.3 через {{ csrf_field() }} метод.

Когда мы выполняем сканирование безопасности, которое, очевидно, дает сбой, сервер возвращает 500 Internal Server Error

Однако на самом деле это не ошибка сервера, поскольку клиент отправляет неверную информацию, поэтому он должен попадать в диапазон 400 ошибок.

Я немного покопался и не могу понять, как он на самом деле возвращает 500.

Кто-нибудь сможет подсказать, как изменить этот ответ на что-то еще?

2 ответа

Решение

Вы можете изменить это через ваш App/Http/Middleware/VerifyCSRFToken.php файл вроде так:

<?php
namespace App\Http\Middleware;

use Closure;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
use Illuminate\Session\TokenMismatchException;

class VerifyCsrfToken extends BaseVerifier {

    public function handle($request, Closure $next) {
        try {
            return parent::handle($request, $next);
        } catch (TokenMismatchException $ex) {
            // throw custom exception like so: throw new CustomException($ex->getMessage());
            // or new HttpException with response code like so: abort(403, $ex->getMessage());
        }
    }
}

В Laravel 5.3 вы идете в app/Exceptions/Handler.php и редактировать render() функция.

public function render($request, Exception $exception)
{
    if ($exception instanceof TokenMismatchException) {
        //do some stuff here.
    }
    return parent::render($request, $exception);
}
Другие вопросы по тегам