尝试使用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)
这几乎就像某些排列会使用某种“保护”标志来阻止它们被发布到数据库中一样?或者某种奇怪的解析错误?
答案 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注入攻击在服务器上。我将发布一个关于如何解决这个问题的新问题(显然你可以配置一个例外列表),因为这是一个与原始问题截然不同的问题。