我有一个ajax
函数可触发从我的数据库删除条目。Yii 2.0针对AJAX请求的CSRF验证
我需要做的CSRF
验证相同。我怎样才能做到这一点?
我发送CSRF cookie
以及我的帖子请求,但Yii 2.0
未验证它,并且通过ajax传递的任何输入到达服务器。
我该怎么做CSRF
验证ajax请求。
我们是否需要手动设置cookie并检查?
我有一个ajax
函数可触发从我的数据库删除条目。Yii 2.0针对AJAX请求的CSRF验证
我需要做的CSRF
验证相同。我怎样才能做到这一点?
我发送CSRF cookie
以及我的帖子请求,但Yii 2.0
未验证它,并且通过ajax传递的任何输入到达服务器。
我该怎么做CSRF
验证ajax请求。
我们是否需要手动设置cookie并检查?
您不需要手动设置cookie。
如果您使用jQuery CSRF令牌将自动发送。
例如,对于AngularJS您可以手动添加到请求参数那样:
yii.getCsrfParam(): yii.getCsrfToken()
请确保您已YiiAsset
包括在内。
否则,你可以从meta标签检索它们(这基本上是这两种方法做):
$('meta[name=csrf-param]').prop('content'): $('meta[name=csrf-token]').prop('content')
另请注意,使CSRF验证两个Controller
的和Request
的财产enableCsrfValidation
属性必须设置到true
。
更新:
另一个重要的事情要了解:
CSRF令牌只有在这个方法进行验证:GET
,HEAD
,OPTIONS
。
此外请确保您在主布局中有<?= Html::csrfMetaTags ?>
。
最后我确定,只是包括
<?= Html::csrfMetaTags() ?>
在邮件布局会自动添加CSRF验证到每一个岗位/ get请求是否是AJAX或not.We不需要手动发送CSRF与AJA
<?= Html::csrfMetaTags() ?>
请求失败,并抛出exception..So这是我mistake..Just加入 <?= Html::csrfMetaTags() ?>
会做CSRF验证它是否是阿贾克斯还是非Ajax请求/表单提交..
向Yii致敬2。0发明者为这样一个真棒的东西#love-yii-2.0
卜如何验证..我应该写在控制器动作来检查它是否验证或不是? –
验证是什么意思? – arogachev
我的意思是,当有人发送没有正确的csrf数据的数据时,他不应该能够执行控制器动作 –