laravel csrf驗證總結
laravel csrf驗證總結
前言問題:
laravel 在web路由
下無論是表單提交啊 還是ajax請求啊 隻要是請求方式不滿足 ['HEAD', 'GET', 'OPTIONS']
就會報419錯誤,原因是其自帶開啟csrf驗證,防止csrf攻擊
感興趣的可以看看這部分源碼:Illuminate\Foundation\Http\Middleware\VerifyCsrfToken
解決方式:
一.屏蔽csrf驗證
部分屏蔽
App\Http\Middleware\VerifyCsrfToken.php
protected $except = [
//這裡添加屏蔽的路由地址
];
全部屏蔽
App\Http\Kernel.php
註釋 \App\Http\Middleware\VerifyCsrfToken::class,
二.加入csrf驗證參數
form提交
<input type="hidden" name="_token" value="{{csrf_token()}}">
ajax提交
<meta name="_token" content="{{csrf_token()}}"> $.ajax({ url: "xxxx", type: "POST", data: data, headers: { 'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content') }, success: function (data) {} });
註意!!!
因為呢 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吧
到此這篇關於laravel csrf驗證總結的文章就介紹到這瞭,更多相關laravel csrf驗證內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Larave框架通過sanctum進行API鑒權詳解
- 淺談laravel中間件的創建思路
- Laravel操作session和cookie的教程詳解
- 淺談Laravel中如何對大文件進行加密
- Django框架CBV裝飾器中間件auth模塊CSRF跨站請求問題