Javascript 某些带括号的字符串导致Ajax POST操作失败,出现403错误(禁止)
当尝试使用Ajax通过表单提交向数据库添加条目时,某些包含括号的字符串将导致POST操作失败,但方式不一致 相关的POST操作如下所示:Javascript 某些带括号的字符串导致Ajax POST操作失败,出现403错误(禁止),javascript,jquery,ajax,post,Javascript,Jquery,Ajax,Post,当尝试使用Ajax通过表单提交向数据库添加条目时,某些包含括号的字符串将导致POST操作失败,但方式不一致 相关的POST操作如下所示: $.ajax( { type: "POST", url: "SubmitAnswer.php", data: datastring, dataType: "json", cache: false, success: function(data) { ... } } datastring包含一组内容,包括一个包含数学表达
$.ajax(
{
type: "POST",
url: "SubmitAnswer.php",
data: datastring,
dataType: "json",
cache: false,
success: function(data)
{
...
}
}
datastring
包含一组内容,包括一个包含数学表达式的字符串。如果该字符串包含括号,在某些非常特殊的情况下,当单击Submit按钮时,它将导致POST操作失败,并出现403错误
以下是导致问题的数学表达式字符串的一些示例:
(A-B)*C
(A*B)*(C*D)
(A+B)*C
A*(B-C)
(A*B)+(C*D)
以下是一些不会引起问题的数学表达式字符串示例:
(A-B)*C
(A*B)*(C*D)
(A+B)*C
A*(B-C)
(A*B)+(C*D)
就好像某些排列会触发某种“保护”标志,阻止它们被发布到数据库?或者某种奇怪的解析错误?看起来您没有正确编码
数据字符串中的键和/或值,以便在应用程序/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
}
})
好的,按照Phil的建议,我检查了服务器日志,以获得关于403错误的更多信息,这些非常特定的字符串导致了错误,问题与这些字符串被服务器上的安全机制“视为”SQL注入攻击有关。我将发布一个关于如何解决这个问题的新问题(显然,您可以配置一个例外列表),因为这是一个与原始问题截然不同的问题。什么是示例datastring
?请出示准确的安装操作。它应该以var-datastring=…
开头。另外,服务器的完整响应是什么?您可以在浏览器的网络控制台中看到它。datastring='edition\u id='+edition\u id+'&昵称='+昵称+'&answer='+answer+'&email\u address='+email\u address;对,所以绝对不需要对字符串中的键或值进行编码。请参阅下面的我的答案。我可以提供与错误相关的附加信息:jquery-1.10.0.js:8715,触发错误的jquery行是:xhr.send((s.hascantent&s.data)| | null);我尝试了上面的建议(除了我保留了cache:false参数,但是相同的特定答案字符串仍然会导致POST失败。在数据{}中传递的一些变量可能不是字符串,因为它们是根据val()分配的值)因此,我不确定这是否包括引号,这可能会导致问题?例如,在代码的前面,我从字段中获得如下值:var answer=$(“#answer”).val();var昵称=$(“#昵称”).val();var email_address=$(“#emailAddress”).val();但奇怪的是,失败的POST/Submit问题只针对非常特定的答案字符串出现,这非常奇怪。@KenBoone失败请求的响应文本到底是什么。检查浏览器网络控制台。您也可以检查服务器错误日志,它可能包含更多线索。此外,POST
请求从不缓存d无论如何,.val()
返回的所有值都是字符串。加载资源失败:服务器响应状态为403(禁止)。它引用了ajax例程URL参数中列出的php文件。是的,好的,我看到了日志条目,它与我的建议一致,一个安全机制正在阻止发布,因为它认为该字符串可能会违反安全性:ModSecurity:file“/etc/httpd/ModSecurity.d/11_asl_adv_rules.conf”][line“81”][id“341245”][rev“37”][msg“Atomicorp.com WAF规则:SQL注入攻击(detectSQLi)”][data“1)o1,ARGS:answer“][severity“CRITICAL”][tag“SQLi”]访问被拒绝,代码403(第2阶段)。使用带有指纹“1”o1的libinjection检测到SQLi