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

相关文章
相关标签/搜索