Php 更改Laravel中的CSRF故障HTTP响应代码

Php 更改Laravel中的CSRF故障HTTP响应代码,php,laravel,laravel-5,csrf,Php,Laravel,Laravel 5,Csrf,我们通过{{csrf_field()}}方法使用laravel 5.3的内置csrf保护 当我们运行明显失败的安全扫描时,服务器返回500内部服务器错误 然而,这实际上不是一个服务器错误-因为它是客户端发送错误信息-因此它应该属于400错误范围 我已经做了一点挖掘,不太明白它实际上是如何返回500的 有人能建议如何将此响应更改为其他响应吗?您可以通过App/Http/Middleware/VerifyCSRFToken.php文件覆盖此响应,如下所示: <?php namespace Ap

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

当我们运行明显失败的安全扫描时,服务器返回
500内部服务器错误

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

我已经做了一点挖掘,不太明白它实际上是如何返回500的


有人能建议如何将此响应更改为其他响应吗?

您可以通过
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());
        }
    }
}

您可以通过您的
应用程序/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);
}

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

什么是您的web服务器apache或Nginx?apache服务器有时会出现此错误,这可以通过更改apache服务器上的一些配置来解决。其apache通过nginx代理运行-但是我们不担心其出错的原因,我们知道这一点,我们只是想更改返回的状态码您的web服务器apache或nginx是什么?apache服务器有时会出现此错误,这可以通过更改apache服务器上的某些配置来解决。它的apache通过nginx代理运行-但是我们不担心它出错的原因,我们知道这一点,我们只是想更改返回Hanks的状态码以获得回复:)我相信这是可行的,然而,由于我们正在使用sentry,并且渲染函数中已经有了额外的逻辑,我们决定将所有逻辑保留在csrf中间件中,而不是在两个位置之间拆分:)感谢您的回复:)我相信这是可行的,然而,由于我们正在使用sentry,并且在渲染函数中已经有了额外的逻辑,我们决定将所有逻辑保留在csrf中间件中,而不是在两个位置之间拆分:)实际上,没有来自异常的消息,因此我们添加了
return abort(403,“CSRF令牌不匹配-请再次尝试提交表单或立即与我们联系”。)
如果您抛出一个自定义异常,您将在何处捕获它来处理它,例如,返回json响应或显示视图。@Andrew所有应用程序异常都可以使用Handler.php捕获。在发生时,请参阅文档页,因为没有来自异常的消息,所以我们添加了
return abort(403,“CSRF令牌不匹配-请尝试再次提交表单或立即与我们联系”);
如果抛出自定义异常,您将在何处捕获它以处理它,例如,返回json响应或显示视图。@Andrew所有应用程序异常都可以使用Handler.php捕获。请参阅文档页面