开启/关闭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();?>
替代手动输入 <form>
标签,yii2框架会自动添加一个隐藏的input,类似下面这样:
当然,为了保持对称,建议使用 <?=yii\helpers\Html::endForm();?>
替代 </form>
字符串
<?=Yii::$app->request->getCsrfToken();?>
可以直接获取到token,这样随便放在哪个位置,比较灵活。但记得post的时候要记得提交给后端,参数名字的话默认是 _csrf
,也可以通过 Yii::$app->request->csrfParam
获取。