发布请求参数的最大数量的后果

我的团队正在从Windows Server 2003和IIS 6上的Coldfusion 8迁移到Windows Server 2008R2和IIS 7.5上的Coldfusion 10。

在我们为CF10服务器构build的标准中,我们已经为POST请求参数的最大数量实现了默认值100。 但是,由于server.log中的错误,我的客户要求限制提高到3000以上,显示:

"Error","ajp-bio-8018-exec-2","06/17/14","10:40:46",,"POST parameters exceeds the maximum limit 100 specified in the server. You can modify the setting in Administrator Server Settings." 

我想增加安抚客户的限制,但是不能太高以影响服务器上托pipe的应用程序和其他环境的稳定性。 将这个设置增加到5000或更高的分歧是什么? 是不是有IIS的缺点和限制?

谢谢。

考虑到以前没有限制。 现在的原因是要解决与所有Web编程语言相关的严重安全问题,而不仅仅是ColdFusion。

他们可能有一些大的forms,这需要更高的设置。 而不是挑选一些任意的值,让他们看看他们的代码库,并确定他们需要的实际最高张贴参数数量,然后给一点填充。

我必须在我的公司做这件事,并且作为我们编码标准的一部分,我们已经对表格的大小实行了限制。 如果新任务出现并且需要超过限制,则重新devise为低于限制。

本文解释了HashDos攻击,这是此设置的原因。

退后一步,了解HashDos漏洞

首先,我们需要了解此设置旨在保护的漏洞,称为HashDos。 要做到这一点,我们需要退一步,了解哈希algorithm是如何工作的。 当你在ColdFusion中的某个结构体中存储了一些东西的时候,例如form [“pete”],它会在这种情况下创build一个键值的散列“pete”,它把值散列为一个整数,让我们假设“pete”.hashCode )== 8

所有哈希algorithm都有可能产生冲突,其中两个不同的string导致相同的哈希码。 那么让我们说“peter”.hashCode()== 8。 您不希望form [“peter”]返回form [“pete”]的结果,所以哈希表为每个整数代码创build一个存储桶。 如果存储桶包含多个项目,则会比较存储桶中的每个项目(这很慢)。

由于这种碰撞比较非常缓慢,这就是拒绝服务的机会。 如果您可以构造一个导致数千次散列冲突查询的请求,则请求可能需要几秒到几分钟才能处理。 例如,大约有5万次碰撞,我的四核Mac Pro和15GB内存花费了近30分钟来处理请求(总大小小于2mb)。

HashDos不仅适用于表单variables

任何时候你在一个结构中存储很多密钥都有可能产生HashDOS。 URL作用域也可能是脆弱的,但是Web服务器通常会限制查询string的大小。 另一个可能出现的地方是如果你接受来自外部源的Xml或JSONstring,然后parsing成一个结构。 因此,只要您接受可能会产生结构键的外部input,请记住这一点。