我有一个网站,它使用一个订单输入表单,并在表单提交时发送一个相当大的post请求。
然而,当一个特定的值被传递到我们的表单变量(orderdetail)中时,每次都会在浏览器中得到一个错误页面,并通过fiddler得到一个504错误。
下面是我昨晚通过fiddler发送post请求时运行的几个测试示例。当“orderdetail=”值更改为以下值时,它将成功提交或在几秒钟后返回504错误:
这些失败:
&orderdetail=deliver+writ+of+execution%3b+and+application+for+earns+predition+order+to+los+angeles+country+sheriff+dash+court+services+division+per+instructions
&orderdetail=交付+执行+收入+预扣+订单+至+洛杉矶+县+警长+冲刺+法院+服务+部门+PER+指示
&orderdetail=deliver+writ+of+execution%3b+and+application+for+earns+predition+order+to+los+angeles+county+sheriff
&orderdetail=deliver+writ+of+execution%3b+application+for+earns+holding+order+to+los+angeles+country+sheriff
&orderdetail=令状+代扣代缴+执行+命令+洛杉矶+县+治安官
&orderdetail=writ+execution+adsfsdfsd+order+county
&orderdetail=wd+execution+adsfsdfsd+order+count
这让我觉得这可能与单词“exec”(“exec”和“execution”抛出错误,“exe”不)和“count”(“county”和“count”抛出错误,“cont”不)有关。
不过,我还没有看到谷歌搜索中提到的关于504错误的任何具体内容。
关于这里的coldfusion代码,这个页面没有什么特别之处。只是一个标准的表格。我在应用程序文件中添加了一个cfmail测试,在这些失败的情况下,它永远不会运行,所以这似乎是在浏览器和i is之间。我们在共享服务器上,所以我看不太多。
奇怪的是,当&orderdetail=param更改为这些值之一(与上面的非常类似)时,结果是成功:
&orderdetail=wd+execution+adsfsdfsd+order+conn
&orderdetail=wd+execution+adsfsdfsd+order+conty
&orderdetail=writ+of+预扣+订单+执行+洛杉矶+郡+治安官
&orderdetail=令状+代扣代缴+执行令+洛杉矶+县+治安官
在第三个例子中,我把“命令”放在“执行”之前,它就起作用了。
此post请求的总长度约为4720个字符。我将这个字段的长度增加到它的长度的5-6倍,然后它们就通过了,所以它几乎与post中“&orderdetail”参数的值相关联。
对于为什么这个特定的数据会成为web服务器的问题,有什么想法吗?我以前从未见过这种情况,而且对于几乎所有其他请求都没有问题。
还有一个有趣的注意:在post请求中,这个变量非常接近param列表的开头。如果我删除了之后的所有内容,就没问题了。虽然我还不能确定是什么在随后的行可能导致它。如果有帮助的话,我可以把整个请求都寄出。
不过,更重要的是,我只想知道什么可以作为表单数据的“保留”或“非法”。所有内容似乎都被正确地转义了,所以我不确定这里还能做什么,除了一些预处理javascript来进一步转义任何这样的单词。
谢谢!
最佳答案
考虑到EXEC
和COUNT
是导致错误的原因,而将ORDER
放在EXEC
之前是防止错误的,这听起来像是有人在试图防止sql注入攻击时犯了错误。
如果你有任何软件声称可以做到这一点,我会看看(暂时)禁用它是否能阻止问题的发生。
(此软件可能处于防火墙级别,因此您可能需要与系统管理员交谈。)
重要的是,我还将检查您的代码库中orderdetail的使用位置,并确保无论何时在查询中使用它,它都在使用cfqueryparam
,其他所有用户提供的数据也是如此。
关于http - 通过HTTP POST发送的哪些特定数据可能会导致HTTP 504错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7629028/