针对AJAX请求的Yii 2.0 CSRF验证

Jin*_*iel 8 php csrf yii2

我有一个ajax函数触发从我的数据库删除条目.

我需要做CSRF同样的验证.我怎样才能做到这一点?

我发送了CSRF cookie我的帖子请求,但Yii 2.0没有验证它,任何通过ajax传递的输入都到达服务器.

如何CSRF对ajax请求进行验证.

我们是否需要手动设置cookie并检查?

aro*_*hev 6

您不需要手动设置cookie。

如果您使用的是jQuery,则CSRF令牌会自动发送。

例如,对于AngularJS,您可以手动添加它以请求如下参数:

yii.getCsrfParam(): yii.getCsrfToken()
Run Code Online (Sandbox Code Playgroud)

确保您已YiiAsset包括在内。

否则,您可以从meta标记中检索它们(基本上这是这两种方法的作用):

$('meta[name=csrf-param]').prop('content'): $('meta[name=csrf-token]').prop('content')
Run Code Online (Sandbox Code Playgroud)

另请注意,要启用CSRF验证Controller,必须将和Request属性enableCsrfValidation属性都设置为true

更新:

要了解的另一件事:

CSRF令牌将只有在这个方法进行验证:GETHEADOPTIONS

还要确保您具有<?= Html::csrfMetaTags ?>主布局。