【问题标题】:Ajax call on CodeIgniter controller results in 403 Forbidden [closed]CodeIgniter 控制器上的 Ajax 调用导致 403 Forbidden [关闭]
【发布时间】:2023-03-04 15:44:01
【问题描述】:

我正在使用带有 Ajax 的 CodeIgniter 3.x 开发。我有一个可以从我的浏览器访问的控制器/方法。但是,当我尝试使用 Ajax 请求/调用该页面时,它似乎总是导致 403 Forbidden-error。

我搜索了各种搜索引擎(包括 StackOverflow),它们都出现了一些类似的问题。他们都没有一个明确的解决方案来解决我的问题,我已经被困了很长时间了。我可以通过 Ajax 请求访问不使用 CI 加载的页面。我的 CI 配置似乎有问题。

我首先想到了一些与会话相关的问题,但是在 CI 中完全打开会话之后,它却不起作用。下面是我用来发出 Ajax 请求的一些代码,我认为这很好,应该可以工作(就像在非 CI 页面上一样)。

$.ajax({
    url : data_url,
    type: 'POST',
    data: pay_load,
    async: false,
    success: function(data) {
        result = JSON.parse(data);
    }
});

【问题讨论】:

  • 那么给我们看一下相关代码...ajax在哪里?
  • 感谢您的关注!我不小心输入了错误的代码。似乎 CI csrf 保护引发了这个 403 Forbidden 错误。我知道有一个选项可以排除某些 uri。但我不确定从 csrf 保护中排除该 uri 是否足够安全。有人对此了解更多吗?

标签: php jquery ajax codeigniter


【解决方案1】:

您的ajaxdata必须包含隐藏的 CSRF 令牌字段的值。这是通过标准表单操作提交但在您执行ajax 时丢失的部分。

【讨论】:

  • 谢谢你!正如您在我上一条评论中看到的那样,我刚刚发现了这一点。我仍然遇到的问题是我还想为这个在 CI 之外工作的控制器制作一些测试文件。因此,我不能使用 CI 的任何函数来创建这样的 csrf-token 并将其传递给发布数据。但是,我可以在该 uri 上禁用 csrf 保护,但我不知道这是否安全。
  • FWIW,在 jQuery Validate 中使用 remote 方法时也需要此 CSRF data。基本上,任何使用ajax 访问 CodeIgniter URL 的东西都必须包含隐藏的 CSRF 令牌的值。
  • @BenurRoptire,CSRF 令牌是为了安全而存在的,所以我永远不会告诉你删除它是“安全的”——这是一个见仁见智的问题。研究the meaning of CSRF,以便您做出明智的决定。
  • 谢谢大家的帮助!我现在已将 uri 从 csrf 保护中排除。我仍然遇到的另一个问题是 Ajax 请求似乎没有使用相同的会话。被请求的控制器需要与用于启动请求的控制器相同的会话。
猜你喜欢
  • 1970-01-01
  • 2017-12-30
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
相关资源
最近更新 更多