2015-05-10 36 views
7

我有一個ajax函數可觸發從我的數據庫刪除條目。Yii 2.0針對AJAX請求的CSRF驗證

我需要做的CSRF驗證相同。我怎樣才能做到這一點?

我發送CSRF cookie以及我的帖子請求,但Yii 2.0未驗證它,並且通過ajax傳遞的任何輸入到達服務器。

我該怎麼做CSRF驗證ajax請求。

我們是否需要手動設置cookie並檢查?

回答

3

您不需要手動設置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令牌只有在這個方法進行驗證:GETHEADOPTIONS

此外請確保您在主佈局中有<?= Html::csrfMetaTags ?>

+0

卜如何驗證..我應該寫在控制器動作來檢查它是否驗證或不是? –

+0

驗證是什麼意思? – arogachev

+0

我的意思是,當有人發送沒有正確的csrf數據的數據時,他不應該能夠執行控制器動作 –

0

最後我確定,只是包括

<?= Html::csrfMetaTags() ?>

在郵件佈局會自動添加CSRF驗證到每一個崗位/ get請求是否是AJAX或not.We不需要手動發送CSRF與AJA

<?= Html::csrfMetaTags() ?>
令牌一起3210

請求失敗,並拋出exception..So這是我mistake..Just加入 <?= Html::csrfMetaTags() ?>

會做CSRF驗證它是否是阿賈克斯還是非Ajax請求/表單提交..

向Yii致敬2。0發明者爲這樣一個真棒的東西#love-yii-2.0