【问题标题】:Server giving 403 error on ajax submit服务器在 ajax 提交时出现 403 错误
【发布时间】:2014-02-25 18:53:34
【问题描述】:

我正在开发一个像 jsfiddle 这样的新项目。 我在开发它时遇到了一个问题。当我尝试在文本框中使用 JS alert() 函数发送 ajax 请求时,服务器出现 403 错误。谁能帮我解决这个问题?

示例: 转到此网址:http://www.labs.codeteam.in/lab

在javascript文本框中输入alert(1)并运行项目,服务器会在控制台报403错误。

【问题讨论】:

  • 我会检查我的 htaccess - 也许对于 url /runProject 你设置了拒绝所有或smth?或者您的帖子受 CSRF 保护,而您没有发送 CSRF 令牌?
  • 你能发布你的控制器代码吗?
  • 我不认为这是因为控制器代码。因为如果我将控制器代码保持为空,它会给我同样的错误。
  • 但是当我在本地机器上运行代码时,它工作正常。
  • 即使您通过 GET 方法而不是 POST 发送 ajax,您会得到 403 吗?

标签: javascript php html codeigniter http


【解决方案1】:

Web 服务器可能会返回 403 Forbidden HTTP 状态代码以响应客户端对网页或资源的请求,以表明可以访问服务器并理解该请求 ,但拒绝采取任何进一步的行动。 状态码 403 响应是 Web 服务器被配置为拒绝访问(出于某种原因)客户端请求的资源的结果。

服务器可能被配置为防止脚本注入。将“alert()”与您的帖子一起发送到服务器可能看起来像是对服务器的某种类型的注入尝试。

【讨论】:

  • 那么解决办法是什么?
【解决方案2】:

在将字符串发送回控制器之前尝试对字符串进行 urlEncode,然后当你得到它时你可以在 php 中解码它

其实是encodeURI http://www.w3schools.com/jsref/jsref_encodeURI.asp

【讨论】:

  • 我认为 urlencode 不会对导致问题的 alert 等关键字进行编码。
  • 括号导致问题不警告关键字
  • 我刚刚写了警报并点击运行,它没有破坏代码,php不知道警报是javascript中的关键字
  • 但是在js中使用哪个函数来编码。 encodeURI 没有对括号进行编码
【解决方案3】:

我找到了另一种方法来做到这一点。 在 ajax 请求中提交数据时,我将反转字符串,以便服务器无法识别关键字,并在 php 中将其反转并使用它。

【讨论】:

    【解决方案4】:

    您找到解决问题的方法了吗? 我碰巧有同样的问题,我以为我的服务器由于某种原因变慢了,但是在发出 ping -i .1 domain.com 后,从发送的 2000 个数据包中,只有 0.1%~ 是丢包。我的查询大约是 2 毫秒。

    我突然得出结论,可能是请求太多,服务器无法同时处理(我在 2 个 js 脚本中执行定期 ajax 请求 [大约每 4 秒 1 次])。

    【讨论】:

      【解决方案5】:

      错误在您的数据中 - 尝试发送一些无用的内容,例如“asdfasdfasdfas” - 没关系,至少我将它粘贴到文本框中,点击运行,然后在 url http://www.labs.codeteam.in/lab/runProject 上我得到 200 状态代码。当我写alert(1) 时,确实抛出了 403 状态代码 - 您的服务器正在将 javascript 数据视为注入代码的尝试。

      【讨论】:

      • 有没有办法通过 htaccess 或设置标题等来阻止这种情况?
      • 不 - 这是你的 PHP 代码,它让它像那样工作。
      • 我也尝试过,但结果相同。而且我不认为它的 Php 问题是因为它正在我的本地系统上运行。
      • 好的,所以您应该对服务器端数据验证做一些事情。我不能帮助你更多的说这个:)
      猜你喜欢
      • 1970-01-01
      • 2011-07-28
      • 2011-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      相关资源
      最近更新 更多