我有一个ajax
函数,可以触发从我的数据库中删除条目。
我需要对此进行CSRF
验证。我怎么能这样做?
我发送了CSRF cookie
以及我的帖子请求,但是Yii 2.0
没有验证它,并且通过ajax传递的任何输入都到达了服务器。
如何对ajax请求进行CSRF
验证。
我们是否需要手动设置cookie并检查?
答案 0 :(得分:4)
您无需手动设置Cookie。
如果您正在使用jQuery CSRF令牌将自动发送。
例如对于AngularJS,您可以手动添加它以请求这样的参数:
yii.getCsrfParam(): yii.getCsrfToken()
确保包含YiiAsset
。
否则你可以从元标记中检索它们(这基本上就是这两种方法的作用):
$('meta[name=csrf-param]').prop('content'): $('meta[name=csrf-token]').prop('content')
另请注意,要启用CSRF验证,Controller
和Request
的属性enableCsrfValidation
属性必须设置为true
。
<强>更新强>
另一个要理解的重要事项:
仅对此方法验证CSRF令牌:GET
,HEAD
,OPTIONS
。
还要确保主布局中有<?= Html::csrfMetaTags ?>
。
答案 1 :(得分:0)
最后我发现只包括
<?= Html::csrfMetaTags() ?>
&#13;
邮件布局中的
会自动为每个发布/获取请求添加csrf验证,无论是否是ajax。我们不需要手动发送csrf令牌和aja
<?= Html::csrfMetaTags() ?>
&#13;
请求失败并抛出异常。所以这是我的错误。只需添加
<?= Html::csrfMetaTags() ?>
都会进行csrf验证。
向Yii 2.0发明家致敬,感谢他们这样一个非常棒的东西#love-yii-2.0