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捕获。请参阅文档页面