我有一個ajax
函數可觸發從我的數據庫刪除條目。Yii 2.0針對AJAX請求的CSRF驗證
我需要做的CSRF
驗證相同。我怎樣才能做到這一點?
我發送CSRF cookie
以及我的帖子請求,但Yii 2.0
未驗證它,並且通過ajax傳遞的任何輸入到達服務器。
我該怎麼做CSRF
驗證ajax請求。
我們是否需要手動設置cookie並檢查?
我有一個ajax
函數可觸發從我的數據庫刪除條目。Yii 2.0針對AJAX請求的CSRF驗證
我需要做的CSRF
驗證相同。我怎樣才能做到這一點?
我發送CSRF cookie
以及我的帖子請求,但Yii 2.0
未驗證它,並且通過ajax傳遞的任何輸入到達服務器。
我該怎麼做CSRF
驗證ajax請求。
我們是否需要手動設置cookie並檢查?
您不需要手動設置cookie。
如果您使用jQuery CSRF令牌將自動發送。
例如,對於AngularJS您可以手動添加到請求參數那樣:
yii.getCsrfParam(): yii.getCsrfToken()
請確保您已YiiAsset
包括在內。
否則,你可以從meta標籤檢索它們(這基本上是這兩種方法做):
$('meta[name=csrf-param]').prop('content'): $('meta[name=csrf-token]').prop('content')
另請注意,使CSRF驗證兩個Controller
的和Request
的財產enableCsrfValidation
屬性必須設置到true
。
更新:
另一個重要的事情要了解:
CSRF令牌只有在這個方法進行驗證:GET
,HEAD
,OPTIONS
。
此外請確保您在主佈局中有<?= Html::csrfMetaTags ?>
。
最後我確定,只是包括
<?= Html::csrfMetaTags() ?>
在郵件佈局會自動添加CSRF驗證到每一個崗位/ get請求是否是AJAX或not.We不需要手動發送CSRF與AJA
<?= Html::csrfMetaTags() ?>
請求失敗,並拋出exception..So這是我mistake..Just加入 <?= Html::csrfMetaTags() ?>
會做CSRF驗證它是否是阿賈克斯還是非Ajax請求/表單提交..
向Yii致敬2。0發明者爲這樣一個真棒的東西#love-yii-2.0
卜如何驗證..我應該寫在控制器動作來檢查它是否驗證或不是? –
驗證是什麼意思? – arogachev
我的意思是,當有人發送沒有正確的csrf數據的數據時,他不應該能夠執行控制器動作 –