AJAX 请求的 Yii 2.0 CSRF 验证

Yii 2.0 CSRF validation for AJAX request

我有一个 ajax 函数可以触发从我的数据库中删除条目。

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

我正在发送 CSRF cookie 和我的 post 请求,但是 Yii 2.0 没有验证它并且通过 ajax 传递的任何输入都到达了服务器.

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

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

不需要手动设置cookie。

如果您正在使用 jQuery CSRF 令牌将自动发送。

例如,对于 AngularJS,您可以手动将其添加到这样的请求参数中:

yii.getCsrfParam(): yii.getCsrfToken()

确保您已包含 YiiAsset

否则您可以从元标记中检索它们(这基本上就是这两种方法所做的):

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

另请注意,要启用 CSRF 验证,ControllerRequest 的 属性 enableCsrfValidation 属性 必须设置为 true.

更新:

另一件需要理解的重要事情:

CSRF 令牌将仅在以下方法上验证:GETHEADOPTIONS.

还要确保主布局中有 <?= Html::csrfMetaTags ?>

最后我确定只包括

    <?= Html::csrfMetaTags() ?>

在邮件布局中将自动为每个 post / get 请求添加 csrf 验证,无论是 ajax 还是 not.We 不需要手动发送 csrf 令牌和 aja

    <?= Html::csrfMetaTags() ?>

请求失败并抛出异常..所以这是我的错误..只需添加 <?= Html::csrfMetaTags() ?>

将进行 csrf 验证,无论是 ajax 还是非 ajax 请求/表单提交..

向 Yii 2.0 的发明者致敬,因为它有这么棒的东西#love-yii-2.0