csrf攻击防御 php,Yii2.0防御csrf攻击方法
yii2中無論是用測(cè)試工具POSTMAN、用命令行CURL請(qǐng)求、ajax請(qǐng)求總是會(huì)得到http400:Bad Request的錯(cuò)誤;而如果用Web網(wǎng)頁方式GET訪問(去除verbFilter的POST限制),是正常的
通過查閱資料發(fā)現(xiàn),這是CRSF驗(yàn)證的原因
原理:
Cookie Hashing, 讓服務(wù)器發(fā)送給客戶端的所有表單中都標(biāo)示一個(gè)隨機(jī)值_csrf,并同時(shí)在客戶端的COOKIE中保存一個(gè)相關(guān)聯(lián)的token;
驗(yàn)證的時(shí)候,服務(wù)端每次對(duì)接收到的請(qǐng)求_POST()過來的一個(gè)input hidden _csrf跟客戶端的COOKIE中的token進(jìn)行對(duì)照驗(yàn)證
攻擊者攻擊的原理是利用了客戶端的COOKIE,但是攻擊者是得不到COOKIE具體的內(nèi)容的,他只是利用(這里拋開XSS攻擊的可能性,由于用戶的Cookie很容易由于網(wǎng)站的XSS漏洞而被盜取,這就另外的1%。一般的攻擊者看到有需要算Hash值,基本都會(huì)放棄了);所以攻擊者沒法在攻擊URL中加入token,這樣就無法通過驗(yàn)證。
這可能是最簡(jiǎn)單的解決方案了,因?yàn)楣粽卟荒塬@得第三方的Cookie(理論上),所以表單中的數(shù)據(jù)也就構(gòu)造失敗了
解決方案:
1.禁用CRSF驗(yàn)證(不推薦):'enableCsrfValidation' => false,
'components'?=>?[
'request'?=>?[
'cookieValidationKey'?=>?'83r5HbITBiMfmiYPOZFdL-raVp4O1VV4',
'enableCookieValidation'?=>?false,
'enableCsrfValidation'?=>?false,
]
2.數(shù)據(jù)提交時(shí),攜帶 csrf 信息
a.調(diào)用組件ActiveForm時(shí),提交數(shù)據(jù)會(huì)自動(dòng)帶上_csrf
b.ajax提交時(shí)可以在頭部獲取到csrf信息(如下圖),與要提交的數(shù)據(jù)一并提交即可
c.也可以通過php獲取csrf信息
Yii::$app->request->csrfParam;(獲取csrf-param)
Yii::$app->request->csrfToken;(獲取csrf-token)
總結(jié)
以上是生活随笔為你收集整理的csrf攻击防御 php,Yii2.0防御csrf攻击方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java定义一个类计算圆的半径,C++编
- 下一篇: “半生瓜”是什么意思?