3

我正在尝试在 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()
      )
});

我错过了什么吗?

谢谢,拉杜。

4

5 回答 5

1

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

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

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

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

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

于 2010-02-05T22:08:59.647 回答
0

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

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

C。

于 2010-02-05T23:09:50.927 回答
0

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

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

public function configure ()

  $this->disableLocalCSRFProtection();

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

于 2010-02-08T22:23:23.297 回答
0

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

于 2010-06-22T11:13:05.050 回答
0

$('#activity__csrf_token').val()

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

于 2010-09-16T21:02:45.727 回答