laravel报错:TokenMismatchException in VerifyCsrfToken.php line 68:

laravel报错:TokenMismatchException in VerifyCsrfToken.php line 68:laravel报错:TokenMismatchException in VerifyCsrfToken.php line 68:

大家好,又见面了,我是你们的朋友全栈君。

csrf防护:

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

csrf详解

解决方式:
(1)csrf防护只有在web.php文件中有效。如果你只是添加路由,可以新建一个路由文件。
(2)找到php/Http/Middleware/VerifyCsrfToken.php例子如下:

class VerifyCsrfToken extends BaseVerifier
{ 
   
    /** * The URIs that should be excluded from CSRF verification. * CSRF【Cross-site request forgery跨站请求伪造】验证时,应排除的URI地址块,形如:'test/login'、'test/*' * @var array */
    protected $except = [
        'test/*',
    ];
}

(3)在post方式提交表单的时候,加上laravel自带的全局帮助函数csrf_token。

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">

(4)如果进行ajax的post请求的时候并没有提交form,表单,此时我们可以通过在meta中写入一些属性来金星csrf防护。

<head>
    <title>Laravel</title>
    <meta name="csrf-token" content="{ 
   { csrf_token() }}">

</head>

 $.ajax({ 
   
        headers: { 
   
          'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        },
        url: "{ 
   {url('/')}}",
        type: "post",
        dataType: "json",
 });

(5)解除csrf防护
找到php/Http/Middleware/VerifyCsrfToken.php例子如下:

public function handle($request, Closure $next)
  {
    // 使用CSRF
    return parent::handle($request, $next);
    // 禁用CSRF
    //return $next($request);
  }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/105888.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号