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