yii2 csrf驗證以及token管理

開啓/關閉csrf

默認狀況下yii2是開啓了csrf驗證功能的,若是須要關閉它的話,只要在控制器中設置一個屬性就能夠:jquery

public $enableCsrfValidation = false;

通常狀況下不建議關閉,但api場景可能須要關閉。ajax

TOKEN生成管理

token生成有三種方式後端

meta標籤

在模板中使用 <?=yii\helpers\Html::csrfMetaTags();?> 便可生成meta標籤,以下api

<meta name="csrf-param" content="_csrf">
<meta name="csrf-token" content="NnNIMTVXUFJuN3tJDDAPAFk4OWBFOAgiBEIiX1kUPTdlJytXQAh9YQ==">

meta標籤主要是給ajax用的,ajax提交的時候能夠直接從meta中獲取csrf-token而後一併提交給後端,csrf-param就是參數名稱,也能夠直接經過header頭提交,以jquery爲例:yii2

$.ajaxSetup({
  headers: {
     'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  }
});

表單隱藏域

使用 <?=yii\helpers\Html::beginForm();?> 替代手動輸入 <form> 標籤,yii2框架會自動添加一個隱藏的input,相似下面這樣:app

<form>
    <input type="hidden" name="_csrf" value="NnNIMTVXUFJuN3tJDDAPAFk4OWBFOAgiBEIiX1kUPTdlJytXQAh9YQ==">

固然,爲了保持對稱,建議使用 <?=yii\helpers\Html::endForm();?> 替代 </form>框架

字符串

<?=Yii::$app->request->getCsrfToken();?> 能夠直接獲取到token,這樣隨便放在哪一個位置,比較靈活。但記得post的時候要記得提交給後端,參數名字的話默認是 _csrf ,也能夠經過 Yii::$app->request->csrfParam 獲取。yii

相關文章
相關標籤/搜索