php中间件1009无标题,php – Laravel CSRF中间件未检查X-CSRF-TOKEN请求标头

中间件:

use Closure;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;

class VerifyCsrfToken extends BaseVerifier {

public function handle($request, Closure $next)

{

return parent::handle($request, $next);

}

}

使用Javascript:

$.ajaxSetup({

headers: {

'X-CSRF-TOKEN': 'wrong-token-to-test',

'X-XSRF-TOKEN': 'another-wrong-token-to-test',

}

});

刀:

$.ajax({

method: "POST",

url: "{{url("login/$user")}}",

data: {

"email": $("#email").val(),

"password": CryptoJS.SHA256($('#password').val()).toString(),

"_token": "{{csrf_token()}}"

}

})

即使对csrf令牌使用错误的Http头值(‘wrong-token-to-test’)也不会导致任何令牌不匹配异常.请求正常处理.这是否意味着Laravel没有检查X-CSRF-TOKEN标头?

解决方法:

Laravel首先尝试从get或post中的_token参数获取CSRF令牌,如果丢失,那么它会尝试从X-CSRF-TOKEN获取它.这是/ vendor / laravel / framework / src / Illuminate / Foundation / Http / Middleware / VerifyCsrfToken中的代码中的实现逻辑,方法tokensMatch:

$token = $request->input('_token') ?: $request->header('X-CSRF-TOKEN');

但是你已经在ajax帖子中有效地包含了_token参数(并且具有正确的值):

"_token": "{{csrf_token()}}"

因此,您在X-CSRF-TOKEN标头中发送的内容无关紧要.

标签:php,laravel,ajax,csrf,middleware

来源: https://codeday.me/bug/20190829/1761242.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值