【问题标题】:CSRF token for ajax用于 ajax 的 CSRF 令牌
【发布时间】:2011-06-13 19:22:59
【问题描述】:

我对使用 ajax 提交的表单有疑问。我用 Zend Framework 做我的表格。有些是真实的形式,所以我添加了一个 Hash 元素。其他用于小型操作(例如此处的赞成票和反对票),因此我使用链接进行操作。

我的问题是我需要使用 ajax,尤其是对于小型表单(链接)。我看到很多问题,但没有足够全面的问题来解决问题。当通过ajax提交表单时,是否有关于如何让csrf令牌顺利工作的详细描述?最好使用 Zend Framework,但一般的 PHP 答案也会有所帮助。

【问题讨论】:

    标签: php ajax security zend-framework csrf


    【解决方案1】:

    您不需要CSRF 令牌。您使用HTTP_X_REQUESTED_WITH 方法(参见例如here)。

    【讨论】:

    • 我在这个问题stackoverflow.com/questions/3664044/… 中读到了 REQUESTED_WITH 标头,但是 Rook 的 cmets(以及答案本身)说这并不安全。所以如果我使用它,我想我仍然需要在其中添加“其他东西”。你有什么看法?
    • @samquo 哈哈 我喜欢我的名字在 SO 安全性上的出现。但它是真的,如果你检查 x_requested_with 它由于 XHR 的相同来源政策而无法利用。
    • 顺便说一句,您可能希望研究与仅信任 REQUESTED_WITH 不同的行为:Rails 和 Django 最近都已更新,以解决可能无法提供足够保护的情况。这是 Django 关于更新的注释:is.gd/JLBrfL 不过,我不确定如何使用 Zend 来实现这一点 :) 我在搜索 CSRF 和 AJAX 时碰巧发现了这个。
    • @Rob 感谢您的指点。不过,我想知道这个漏洞是什么。它所说的只是“浏览器插件和 HTTP 重定向的组合”。听起来像是浏览器插件错误。
    • @Artefacto 你可以在lists.webappsec.org/pipermail/websecurity_lists.webappsec.org/…阅读有关漏洞利用的详细信息
    【解决方案2】:

    对于那些来到这个页面的人,可以让 csrf 与 ajax 一起工作。

    在控制器中,您需要通过在操作结束前添加这个来重新生成哈希:

    $form->hash->initCsrfToken();

    $this->view->csrfhash = $form->hash->getValue();

    在您用于执行 ajax 的 js 文件中,您将需要使用选择器在创建哈希时查找它的实例(对于 jquery:

    $(#hash).replaceWith(csrfhash); 实际上,如果您使用 replaceWith,您将替换整个隐藏的 csrf 元素,包括 id 和 name。但这部分应该很容易做到。

    【讨论】:

      猜你喜欢
      • 2019-01-13
      • 2014-05-01
      • 2015-03-06
      • 2018-12-11
      • 2018-12-31
      • 2018-02-22
      • 2018-09-07
      • 2016-02-11
      • 2019-06-01
      相关资源
      最近更新 更多