首頁  >  文章  >  php教程  >  Yii2.0防禦csrf攻擊方法

Yii2.0防禦csrf攻擊方法

黄舟
黄舟原創
2017-01-03 09:46:161525瀏覽

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資訊(如下圖),與要提交的資料一併提交即可

Yii2.0防禦csrf攻擊方法

c.也可以透過php取得csrf資訊

Yii::$app->request->csrfParam;(获取csrf-param)
Yii::$app->request->csrfToken;(获取csrf-token)

以上就是Yii2.0防禦csrf攻擊方法的內容,更多相關內容請關注PHP中文網(www.php.cn)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn