开启/关闭csrf
默认情况下yii2是开启了csrf验证功能的,如果需要关闭它的话,只要在控制器中设置一个属性就可以:
public $enableCsrfValidation = false;
一般情况下不建议关闭,但api场景可能需要关闭。
TOKEN生成管理
token生成有三种方式
meta标签
在模板中使用 =yii\helpers\Html::csrfMetaTags();?> 即可生成meta标签,如下
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();?> 替代手动输入
标签,yii2框架会自动添加一个隐藏的input,类似下面这样:当然,为了保持对称,建议使用 =yii\helpers\Html::endForm();?> 替代
字符串
=Yii::$app->request->getCsrfToken();?> 可以直接获取到token,这样随便放在哪个位置,比较灵活。但记得post的时候要记得提交给后端,参数名字的话默认是 _csrf ,也可以通过 Yii::$app->request->csrfParam 获取。