Yii 2.0 CSRF验证AJAX请求 [英] Yii 2.0 CSRF validation for AJAX request

查看:82
本文介绍了Yii 2.0 CSRF验证AJAX请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 ajax 函数,该函数触发从数据库中删除条目。

I have an ajax function that triggers an entry deletion from my database.

我需要对它进行 CSRF 验证。我该怎么做?

I need to do CSRF validation for the same. How can I do that?

我正在发送 CSRF cookie 和我的帖子请求,但 Yii 2.0 未对其进行验证,并且任何通过ajax传递的输入都已到达服务器。

I am sending the CSRF cookie along with my post request, but Yii 2.0 is not validating it and any input that is passed through ajax is reaching the server.

我该怎么做 CSRF 验证ajax请求。

How do I do CSRF validation for ajax requests.

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

Whether we need to manually set cookie and check?

推荐答案

您不需要手动设置cookie。

You don't need to manually set cookie.

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

If you are using jQuery CSRF token will be sent automatically.

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

For example for AngularJS you can add it manually to request params like that:

yii.getCsrfParam(): yii.getCsrfToken()

请确保您将包含 YiiAsset

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

Otherwise you can retrieve them from meta tags (that's basically what these two methods do):

$('meta[name=csrf-param]').prop('content'): $('meta[name=csrf-token]').prop('content')

还请注意,为了启用CSRF验证,两个 Controller Request 的属性 enableCsrfValidation 的属性必须设置为 true

Also note that for enabling CSRF validation both Controller's and Request's property enableCsrfValidation property must be set to true.

更新:

需要理解的另一件事:

CSRF令牌仅可通过以下方法验证: GET HEAD 选项

CSRF token will be validated only on this methods: GET, HEAD, OPTIONS.

还要确保您拥有<吗? = Html :: csrfMetaTags?> 在主布局中。

Also make sure you have <?= Html::csrfMetaTags ?> in main layout.

这篇关于Yii 2.0 CSRF验证AJAX请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆