【问题标题】:CSRF attack detected when submitting data using ajax使用 ajax 提交数据时检测到 CSRF 攻击
【发布时间】:2011-01-13 17:07:02
【问题描述】:

我尝试在 symfony 1.4 中使用 jquery 提交表单,但每次都会弹出 CSRF 攻击检测错误。这是我用来提交表单数据的代码:

$.ajax({
      type: 'post',
      cache: false,
      url: $('#assign-form form').attr('action'),
      data: (
        'activity[id]=' + $('#activity_id').val() +
        '&activity[_csrf_token]=' + $('#activity__csrf_token').val() +
        '&activity[assigned_to_user_id]=' + $('#activity_assigned_to_user_id').val() +
        '&activity[assigned_to_group_id]=' + $('#activity_assigned_to_group_id').val()
      )
});

我错过了什么吗?

谢谢, 拉杜。

【问题讨论】:

  • 可以粘贴表单的 HTML 代码,或许还有应该处理表单的 PHP?

标签: php jquery ajax symfony1 csrf


【解决方案1】:

要查看的一件事是验证输入的 Form 对象是否与生成令牌的对象完全相同。默认情况下,该类用于生成 CSRF 令牌。

例如,如果您有一个用于生成表单 html 的表单子类的实例,然后您发布到使用祖先表单类的操作,则默认情况下验证很可能会失败。

如果事实证明这是您的问题,则可以覆盖令牌创建。

另外,您是否验证过令牌字段的值实际上包含令牌? console.log() 可以帮助您发现这一点。

嗯...当我仔细查看您的代码时,要注意的另一件事是您正在构建一个查询字符串以传递“数据”。您是否尝试过传递实际的 JSON 样式对象?

【讨论】:

  • 表单类是一样的。以前从未使用过 JSON 样式的对象...我应该阅读任何文章以开始使用?
  • 对于 JSON 样式的对象,我的意思是使用 JavaScript 对象来存储键/值对。最终 $.ajax() 会为您将其转换为查询字符串,但它可以使事情更具可读性并且更易于扩展。以下是使用 JSON 样式对象时上面代码可能看起来的样子:pastie.org/812536 那里有大量关于 JSON 的文章,但我不确定是否有明确的建议。但是,要熟悉 JSON 概念,最好的起点是 json.org Cheers。
【解决方案2】:

通常的原因是浏览器不接受 cookie - 您是否检查过 cookie 是否按预期返回(例如 iehttpheaders、wireshark、tamperdata)?

您是否在 settings.yml 中配置了 secret?

C.

【讨论】:

  • 浏览器正在接受cookies。是的,security.yml中的配置是:csrf_secret: 42f41325ba2c6809722d2b164f954f74c1b82fdb
【解决方案3】:

这个小问题过去让我发疯。

如果您可以为此特定表单禁用 CSRF 保护(通常可以),您可以将以下内容添加到 /lib/form/... 文件夹中的 Form 类中:

public function configure ()

  $this->disableLocalCSRFProtection();

如果您不总是希望禁用 CSRF,我相信也可以为表单的特定实例禁用 CSRF,但我还没有尝试过/手头没有代码。

【讨论】:

  • 您可以在您的操作中使用以下代码来禁用特定表单实例的 CSRF 保护: $form = new MyForm(); $form->disableLocalCSRFProtection();
【解决方案4】:

会话 cookie 真的是通过 ajax 查询接收到的吗?服务器返回的会话 cookie 应该与普通 HTTP 请求(例如启动会话管理的第一个请求)和 XMLHttpRequest 完全相同,否则您将遇到 CSRF 问题。

【讨论】:

    【解决方案5】:

    $('#activity__csrf_token').val()

    您的意思是在那个元素 id 中有一个双下划线吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-24
      • 2012-07-16
      • 1970-01-01
      • 2013-04-17
      • 2014-11-29
      • 2020-05-27
      相关资源
      最近更新 更多