带括号的某些字符串导致Ajax POST操作失败,出现403错误(禁止)

时间:2017-06-02 01:26:40

标签: javascript jquery ajax post

尝试使用Ajax通过表单提交向数据库添加条目时,某些包含括号的字符串将导致POST操作失败,但不会以一致的方式。

相关的POST操作如下所示:

$.ajax(
{
  type: "POST",
  url: "SubmitAnswer.php",
  data: datastring,
  dataType: "json",
  cache: false,
  success: function(data)
  {
    ...
  }
}

datastring包含一堆东西,包括一个包含数学表达式的字符串。如果该字符串包含括号,则在某些非常特定的情况下,单击“提交”按钮时,将导致POST操作失败并显示403错误。

以下是导致问题的数学表达式字符串的一些示例:

(A-B)*C
(A*B)*(C*D)

以下是一些不会导致问题的数学表达式字符串示例:

(A+B)*C
A*(B-C)
(A*B)+(C*D)

这几乎就像某些排列会使用某种“保护”标志来阻止它们被发布到数据库中一样?或者某种奇怪的解析错误?

2 个答案:

答案 0 :(得分:1)

看起来您没有正确编码datastring中的密钥和/或值,以便在application/x-www-form-urlencoded请求有效负载中使用。

我的建议是,让jQuery通过传递一个对象来进行编码,例如

$.ajax({
  method: 'POST',
  url: 'SubmitAnswer.php',
  dataType: 'json',
  data: {
    edition_id: edition_id,
    nickname: nickname,
    answer: answer,
    email_address: email_address
  }
})

答案 1 :(得分:1)

好的,按照Phil的建议,我检查了服务器日志,以获取有关403错误的更多信息,这些错误是由于安全机制被“看作”SQL注入攻击在服务器上。我将发布一个关于如何解决这个问题的新问题(显然你可以配置一个例外列表),因为这是一个与原始问题截然不同的问题。