当前位置:首页 > CMS教程 > 其它CMS > 列表

laravel csrf验证总结

发布:smiling 来源: PHP粉丝网  添加日期:2022-04-18 10:46:21 浏览: 评论:0 

这篇文章主要介绍了laravel csrf验证总结,csrf是laravel表单提交和ajax请求为了安全设置的机制,有感兴趣的同学可以深入学习下。

laravel csrf验证总结

前言问题:

laravel 在web路由下无论是表单提交啊 还是ajax请求啊 只要是请求方式不满足 ['HEAD', 'GET', 'OPTIONS']

就会报419错误,原因是其自带开启csrf验证,防止csrf攻击

感兴趣的可以看看这部分源码:Illuminate\Foundation\Http\Middleware\VerifyCsrfToken

解决方式:

一.屏蔽csrf验证

部分屏蔽

  1. App\Http\Middleware\VerifyCsrfToken.php 
  2. protected $except = [ 
  3. //这里添加屏蔽的路由地址 
  4. ]; 

全部屏蔽

App\Http\Kernel.php

注释 \App\Http\Middleware\VerifyCsrfToken::class,

二.加入csrf验证参数

form提交

<input type="hidden" name="_token" value="{{csrf_token()}}">

ajax提交

  1. <meta name="_token" content="{{csrf_token()}}"
  2. $.ajax({ 
  3.    url: "xxxx"
  4.    type: "POST"
  5.    data: data, 
  6.    headers: { 
  7.      'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content'
  8.      }, 
  9.    success: function (data) {} 
  10.   }); 

注意!!!

因为呢 laravel的token是存储在session里的,所以呢,我遇到了一个大坑,代码传到linux里后 csrf总报错???

最后debug发现 因为提交的token值与session里的不一致

(md 因为 storag2目录么权限 —>storage/framework/sessions 是存储session的目录)

开启777就ok了

最后总结一下排错顺序

1.检查表单有没有 csrf_token

2.linux 下storage有没有读写权限

3.检查session存储位置时候更换过(换过里面还是否有_token)

4.清除浏览器缓存,laravel缓存

最后没招 自己源码debug吧。

Tags: csrf laravel验证

分享到: