Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 某些带括号的字符串导致Ajax POST操作失败,出现403错误(禁止)_Javascript_Jquery_Ajax_Post - Fatal编程技术网

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

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通过表单提交向数据库添加条目时,某些包含括号的字符串将导致POST操作失败,但方式不一致

相关的POST操作如下所示:

$.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