csrf攻擊在laravel中的解決方法

解決方法:1、利用laravel自動(dòng)為每個(gè)用戶(hù)Session生成了一個(gè)“csrf Token”,該Token可用于驗(yàn)證登錄用戶(hù)和發(fā)起請(qǐng)求者是否是同一人,如不是則請(qǐng)求失敗;2、提供了一個(gè)全局幫助函數(shù)“csrf_token”來(lái)獲取Token值,只需在視圖提交表單中添加token代碼即可,語(yǔ)法為“”。

csrf攻擊在laravel中的解決方法

本文操作環(huán)境:Windows10系統(tǒng)、Laravel9版、Dell G3電腦。

csrf攻擊在laravel中的解決方法

CSRF是跨站請(qǐng)求偽裝(Cross-site request forgery)的英文縮寫(xiě);

?Laravel框架中避免CSRF攻擊很簡(jiǎn)單:

1、Laravel自動(dòng)為每個(gè)用戶(hù)Session生成了一個(gè)CSRF Token,該Token可用于驗(yàn)證登錄用戶(hù)和發(fā)起請(qǐng)求者是否是同一人,如不是則請(qǐng)求失敗。(原理和驗(yàn)證碼是一致的。)

2、 Laravel提供了一個(gè)全局幫助函數(shù)csrf_token來(lái)獲取Token值,因此只需在視圖提交表單中添加如下html代碼即可在請(qǐng)求中帶上Token:

<input>"&gt;

Laravel中如何避免CSRF攻擊

案例:通過(guò)案例實(shí)現(xiàn)csrf的機(jī)制驗(yàn)證
1、創(chuàng)建兩個(gè)路由,一個(gè)用于展示表單(get),另外處理請(qǐng)求(post)

Route::get('test6','HomeTestController@test6');Route::post('test7','HomeTestController@test7');

2、創(chuàng)建需要的方法

	 public function test6(){         return view('home.test.test6');      }      public function test7()      {          return "請(qǐng)求提交成功";      }

3、創(chuàng)建需要的簡(jiǎn)易表單

csrf攻擊在laravel中的解決方法

4、提交效果(報(bào)錯(cuò)頁(yè)面)

csrf攻擊在laravel中的解決方法

結(jié)論:通過(guò)剛才的案例,說(shuō)明在laravel中csrf驗(yàn)證機(jī)制默認(rèn)是開(kāi)啟的。

5、解決報(bào)錯(cuò)問(wèn)題(如何通過(guò)csrf驗(yàn)證)
解決思路:帶上csrf需要token值,隨著請(qǐng)求傳遞給后續(xù)的方法

<form action="/home/test/test7" method="post">     用戶(hù)名:<input type="text" name="username"><br>     <input type="hidden" name="_token" value="{{csrf_token()}}">     {{csrf_field()}}     <input type="submit" value="提交"></form>

針對(duì)csrf_token方法的簡(jiǎn)化:{{csrf_field()}}

具體的表現(xiàn)形式:

csrf攻擊在laravel中的解決方法

兩者的區(qū)別:
Csrf_token只是輸出token的值
Csrf_field輸出了一個(gè)整個(gè)的input隱藏域

在后期使用的時(shí)候怎么選擇:大部分情況下可以自己根據(jù)情況選擇。但是有一個(gè)情況下開(kāi)發(fā)者是沒(méi)有選擇權(quán)限的,必須需要使用csrf_token的,這個(gè)情況就是使用異步提交表單的方式。

從CSRF驗(yàn)證中排除例外路由

并不是所有請(qǐng)求都需要避免CSRF攻擊,比如去第三方API獲取數(shù)據(jù)的請(qǐng)求。
可以通過(guò)在VerifyCsrfToken(app/http/Middleware/VerifyCsrfToken.php中間件中將要排除的請(qǐng)求URL添加到$except屬性數(shù)組中:

通過(guò)編寫(xiě)配置設(shè)置例外:
單個(gè)路由排除寫(xiě)法

 'home.test.test6',

多個(gè)元素之間通過(guò)“,”分割,遵循數(shù)組寫(xiě)法。

'home.test.test6','home.test.test7'

如果需要排除全部路由使用csrf的話,則可以寫(xiě)成:

'*'

【相關(guān)推薦:laravel視頻教程

以上就是csrf攻擊在

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊7 分享
站長(zhǎng)的頭像-小浪學(xué)習(xí)網(wǎng)月度會(huì)員