1

所以我让我的网站上线了,我进入了人们并不总是友善的公共领域。我刚开始学习 CSRF,当我让我的 cakephp 3 网站上线时,我发现它是我需要的东西。如这里所见!

我将 csrf 组件和安全组件添加到我的站点,但我有 1 个主要问题。现在,当用户想要注册时,他们不能。我使用自定义表单进行条纹发送付款,但还将使用 ajax 的用户添加到我的数据库中。首先添加用户,然后处理付款并将订单也保存到数据库中。

根据条纹文档,我在单击提交按钮后将隐藏值中的令牌添加到表单中,并且不禁注意到我的新安全性不允许这种情况发生。

由于我使用 ajax 将发布数据发送到我的用户控制器并在提交时添加表单输入,

如何检查 csrf 令牌并确保不存在安全漏洞而不禁用所涉及操作的安全性?

非常感谢如何完成此操作的示例,因为在 cakephp 3 中似乎缺少执行此操作的示例。我也很难弄清楚一切是如何工作的,因为 cakephp 3 automagic 将令牌添加到表单和曲奇饼。我不确定如何/在哪里/检查什么。

4

3 回答 3

5

对于 pass ,在您的 Ajax 请求中X-CSRF-Token使用参数,并定义cookie 的值。beforeSendcsrfToken

$.ajax({
    url: '/foo/bar',
    type: 'POST',
    dataType: 'HTML',
    data: data,
    beforeSend: function(xhr){
        xhr.setRequestHeader('X-CSRF-Token', csrfToken);
    },
})
.done(function(data) {
    alert('done !');
});
于 2016-02-06T08:23:53.550 回答
3

根据条带文档,我在单击提交按钮后将隐藏值中的令牌添加到表单中,并且不禁注意到我的新安全性不允许这种情况发生。

Cake 的 CSRF 令牌在 POST 到另一个站点时将不起作用。

由于我使用 ajax 将发布数据发送到我的用户控制器并在提交时添加表单输入,

如何检查 csrf 令牌并确保不存在安全漏洞而不禁用所涉及操作的安全性?

CSRF 令牌在名为 的 cookie 中可用csrfToken,因此请在您的 javascript 中读取该令牌并X-CSRF-Token为您的 AJAX 请求设置标头。将CsrfCompoment进行检查。

于 2015-11-30T17:09:22.387 回答
2
using js function:

function getCookie(name) {
  var value = "; " + document.cookie;
  var parts = value.split("; " + name + "=");
  if (parts.length == 2) return parts.pop().split(";").shift();
}
...
then
$.ajax
        ({
            type: "Post",
            url: "URL_HERE",
            data: {some_data},
            beforeSend: function(xhr){
                xhr.setRequestHeader('X-CSRF-Token', getCookie('csrfToken'));
            },
            success: function (e) {
            },
            errors: function () {
            }
        });
于 2016-10-29T04:11:36.547 回答