在Laravel中更改CSRF失败HTTP响应代码

时间:2017-01-18 10:45:10

标签: php laravel laravel-5 csrf

我们正在通过{{ csrf_field() }}方法使用laravel 5.3内置的csrf保护。

当我们运行明显失败的安全扫描时,服务器返回500 Internal Server Error

然而,这实际上不是服务器错误 - 因为它是客户端发送错误信息 - 因此它应该属于400错误范围。

我已经做了一点挖掘,并且很难看到它实际上是如何返回500.

是否有人能够建议如何将此响应更改为其他内容?

2 个答案:

答案 0 :(得分: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());
        }
    }
}

答案 1 :(得分:2)

在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);
}