yii2 csrf验证以及token管理

≡放荡痞女 提交于 2019-12-04 15:07:38

开启/关闭csrf

默认情况下yii2是开启了csrf验证功能的,如果需要关闭它的话,只要在控制器中设置一个属性就可以:

public $enableCsrfValidation = false;

一般情况下不建议关闭,但api场景可能需要关闭。

TOKEN生成管理

token生成有三种方式

meta标签

在模板中使用 <?=yii\helpers\Html::csrfMetaTags();?> 即可生成meta标签,如下

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

meta标签主要是给ajax用的,ajax提交的时候可以直接从meta中获取csrf-token然后一并提交给后端,csrf-param就是参数名称,也可以直接通过header头提交,以jquery为例:

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

表单隐藏域

使用 <?=yii\helpers\Html::beginForm();?> 替代手动输入 <form> 标签,yii2框架会自动添加一个隐藏的input,类似下面这样:

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

当然,为了保持对称,建议使用 <?=yii\helpers\Html::endForm();?> 替代 </form>

字符串

<?=Yii::$app->request->getCsrfToken();?> 可以直接获取到token,这样随便放在哪个位置,比较灵活。但记得post的时候要记得提交给后端,参数名字的话默认是 _csrf ,也可以通过 Yii::$app->request->csrfParam 获取。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!