Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用ajax提交数据时检测到CSRF攻击_Php_Jquery_Ajax_Symfony1_Csrf - Fatal编程技术网

Php 使用ajax提交数据时检测到CSRF攻击

Php 使用ajax提交数据时检测到CSRF攻击,php,jquery,ajax,symfony1,csrf,Php,Jquery,Ajax,Symfony1,Csrf,我试图在symfony 1.4中使用jquery提交表单,但每次都会弹出CSRF攻击检测到的错误。这是我用来提交表单数据的代码: $.ajax({ type: 'post', cache: false, url: $('#assign-form form').attr('action'), data: ( 'activity[id]=' + $('#activity_id').val() + '&activi

我试图在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()
      )
});
我错过什么了吗

谢谢,
Radu。

需要注意的一点是,验证输入的表单对象是否与生成令牌的表单对象完全相同。默认情况下,该类用于生成CSRF令牌

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

如果发现这是您的问题,则可以覆盖令牌创建

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


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

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

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


C.

这个小问题过去让我发疯

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

public function configure ()

  $this->disableLocalCSRFProtection();

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

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

$(“#activity_ucsrf_token”).val()


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

可以粘贴表单的HTML代码,也可能是应该处理表单的PHP?浏览器正在接受cookies。是的,security.yml中的配置是:csrf_secret:42f41325ba2c680972d2b164f954f74c1b82fdb表单类是相同的。以前从未使用过JSON样式的对象。。。有什么我应该读的文章吗?关于JSON风格的对象,我只是指使用JavaScript对象来存储键/值对。最终,$.ajax()将为您将其转换为查询字符串,但它可以使内容更可读,更易于扩展。下面是上面代码在使用JSON样式对象时的大致情况:关于JSON的文章很多,但我不确定是否有明确的建议。然而,为了熟悉JSON概念,最好的开始是干杯$表单->禁用LocalCsrfProtection();