【问题标题】:Sending JSON string using JQUERY POST returns 403 forbidden [closed]使用 JQUERY POST 发送 JSON 字符串返回 403 禁止 [关闭]
【发布时间】:2015-07-17 20:30:15
【问题描述】:

这是一个非常奇怪的问题,现在让我发疯了几个小时。我想使用 JQUERY POST 向 PHP 发送 JSON 字符串。

用于发帖的片段:

<script>
$(document).ready(function(){
     $.post('/test.php',
     {
           results: '{"having"}'
     },
     function(data, textStatus) {
              alert(data);
     });
});
</script>

我不知道为什么将“有”这个词作为 JSON 字符串发送不起作用。这是保留字还是什么?代码非常简单。 “test.php”文件就在那里。一切似乎都很好。

我在控制台日志中得到了这个:

POST http://domain.com/test.php 403 (Forbidden)

【问题讨论】:

  • 服务器是否需要登录或其他形式的身份验证?为什么您认为数据中的 having 一词会导致问题?
  • 您传递的值不应该通过data: '{"having"}' 而不是results 发送吗?
  • 无论如何这都是非法的 json。 {} 是一个对象,它必须具有 {"key":"value"} 格式。
  • @RoryMcCrossan 不,文件实际上是空的。这只是一个测试脚本。我不知道,但是替换“拥有”这个词可以解决问题!我在测试一个实际的生产脚本并发现当这个词出现时它停止了这一点
  • 没有看到test.php,很难说什么可能是问题所在。您能否成功地将 HTML 表单发布到相同的 URL?如果是这样,你能给我们看看那个表格吗?

标签: javascript jquery json post


【解决方案1】:

确实很奇怪。根据给定的信息,以下是我的建议性问题...

  • POST 是否试图在您的应用程序中访问正确的 URL?
  • URL 命名空间是否依赖于基于角色的安全性?
  • 您的应用程序是否有任何您在请求中遗漏的类似 CSRF 的安全令牌?
  • 是否有任何与安全相关的请求拦截器在搜索关键字中查找 SQL 查询,以禁止 SQL 注入? (因为having毕竟是一个SQL关键字。)

希望对你有帮助。

【讨论】:

  • 我开始觉得这与单词“HAVING”和SQL注入有关,因为像这样"having"在双引号中发送相同的单词仍然是一个问题,并且已知子查询用于正如您指出的那样,用于 SQL 注入的双引号,但我不确定这是否是实际问题:(
  • 您提到的“测试实际生产脚本”(在 cmets 中)实际上给了我这个想法。我也不确定,如果这确实是根本原因。这只是一个明智的猜测。
  • 伙计,你只是个聪明人*** :D 我尝试使用其他 SQL 单词,如“SELECT”,但它仍然被阻止!然后我在我的其他网络主机上尝试了相同的脚本,它工作正常!所以,这是一种保护(尽管我认为这是一个愚蠢的)措施来防止 SQL 注入。解决方案是跳过双引号。但是,如果可能,我会要求我的主机关闭此功能,因为我使用带有绑定的准备好的语句来避免 SQL 注入,并且不需要这个令人困惑的功能
  • 太棒了..这解决了非常奇怪的问题。很高兴我能帮助你。 :)
【解决方案2】:

尝试转义引号

$(document).ready(function(){
     $.post('/test.php',
     {
           results: "{\"having\"}"
     },
     function(data, textStatus) {
              alert(data);
     });
});

【讨论】:

  • 这仍然是非法的 json...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-01
  • 2017-03-12
  • 2019-09-03
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
相关资源
最近更新 更多