Yii 2.0 CSRF验证AJAX请求 [英] Yii 2.0 CSRF validation for AJAX request
问题描述
我有一个 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屋!