黑马lavarel教程---4、csrf验证及相关
黑馬lavarel教程---4、csrf驗證及相關(guān)
一、總結(jié)
一句話總結(jié):
csrf驗證就像短信驗證碼那樣驗證用戶身份,這個驗證是為了驗證是本站的操作,用的是一個token字符串,外站如果有了這個token字符串,也是可以請求的
?
1、Laravel框架中避免CSRF攻擊原理?
Laravel框架中避免CSRF攻擊很簡單:Laravel自動為【每個用戶Session】生成了一個CSRF Token,該Token可用于驗證登錄用戶和發(fā)起請求者是否是同一人,如果不是則請求失敗。【該原理和驗證碼的原理是一致】
?
2、Csrf_token和Csrf_field的區(qū)別?
Csrf_token只是輸出token的值,Csrf_field輸出了一個整個的input隱藏域
?
3、如何查看csrf_token值?
全局幫助函數(shù)csrf_token來獲取該Token值
Laravel提供了一個全局幫助函數(shù)csrf_token來獲取該Token值,因此只需在視圖提交表單中添加如下HTML代碼即可在請求中帶上Token: <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">?
?
4、{{csrf_token}}和{{csrf_field}}如何選擇?
異步ajax的時候必須Csrf_token,表單的時候推薦Csrf_field,省事
?
5、外部網(wǎng)站怎么能在有csrf驗證的情況下進(jìn)行csrf攻擊?
將用戶對應(yīng)的token值放在input隱藏域里面,請求地址還是比較好獲取的
<input type="hidden" name="_token" value="U34XbEpI81k9b9FLgHZiVZUQWkbjcbbp6Z4SQUbwP">?
?
6、從CSRF驗證中排除例外路由:并不是所有請求都需要避免CSRF攻擊,比如去第三方API獲取數(shù)據(jù)的請求?
可以通過在VerifyCsrfToken(app/Http/Middleware/VerifyCsrfToken.php)中間件中將要排除的請求URL添加到$except屬性數(shù)組中
protected $except=[//該處寫需排除csrf驗證的路由'home/test/test7','home/test/test' ];?
?
?
?
二、csrf驗證及相關(guān)
1、什么是CSRF攻擊
CSRF是跨站請求偽造(Cross-site request forgery)的英文縮寫:
Laravel框架中避免CSRF攻擊很簡單:Laravel自動為每個用戶Session生成了一個CSRF Token,該Token可用于驗證登錄用戶和發(fā)起請求者是否是同一人,如果不是則請求失敗。【該原理和驗證碼的原理是一致】
Laravel提供了一個全局幫助函數(shù)csrf_token來獲取該Token值,因此只需在視圖提交表單中添加如下HTML代碼即可在請求中帶上Token:
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
?
2、Laravel中如何避免CSRF攻擊
案例:通過案例實(shí)現(xiàn)csrf的機(jī)制驗證
①創(chuàng)建兩個路由,一個用于展示表單(get),另外處理請求(post)
?
?
?
?
②創(chuàng)建需要的方法
?
?
?
?
③創(chuàng)建需要的簡易表單
?
?
?
效果:
?
?
?
?
④提交效果(報錯頁面)
?
?
?
?
結(jié)論:通過剛才的案例,說明在laravel中csrf驗證機(jī)制默認(rèn)是開啟的。
?
⑤解決報錯問題(如何通過csrf驗證)
解決思路:帶上csrf需要token值,隨著請求傳遞給后續(xù)的方法
?
?
?
?
針對csrf_token方法的簡化:{{csrf_field()}}
?
?
?
具體的表現(xiàn)形式:
?
?
?
?
兩者的區(qū)別:
Csrf_token只是輸出token的值
Csrf_field輸出了一個整個的input隱藏域
?
在后期使用的時候怎么選擇:大部分情況下可以自己根據(jù)情況選擇。但是有一個情況下開發(fā)者是沒有選擇權(quán)限的,必須需要使用csrf_token的,這個情況就是使用異步提交表單的方式。
?
3、從CSRF驗證中排除例外路由
并不是所有請求都需要避免CSRF攻擊,比如去第三方API獲取數(shù)據(jù)的請求。
可以通過在VerifyCsrfToken(app/Http/Middleware/VerifyCsrfToken.php)中間件中將要排除的請求URL添加到$except屬性數(shù)組中:
?
?
?
?
通過編寫配置設(shè)置例外:
單個路由排除寫法
?
?
?
?
多個元素之間通過“,”分割,遵循數(shù)組寫法。
?
?
如果需要排除全部路由使用csrf的話,則可以寫成:
?
?
?
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/Renyi-Fan/p/11324826.html
總結(jié)
以上是生活随笔為你收集整理的黑马lavarel教程---4、csrf验证及相关的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黑马lavarel教程---3、数据库和
- 下一篇: 后盾网lavarel视频项目---lav