最佳答案
Microsoft最近(2011年12月29日)发布了一个更新,以解决.NET Framework中的几个严重安全漏洞。MS11-100引入的修复程序之一暂时缓解了涉及哈希表冲突的潜在DoS攻击。此修复似乎会破坏包含大量POST数据的页面。在我们的例子中,在具有非常大的复选框列表的页面上。为什么会出现这种情况?
一些非官方来源似乎表明,MS11-100对回发项目设置了500的限制。我找不到微软的消息来源证实这一点。我知道视图状态和其他框架特性在一定程度上抵消了这种限制。是否有任何控制此新限制的配置设置?我们可以不使用复选框,但它非常适合我们的特定情况。我们还想使用补丁,因为它可以防止其他一些讨厌的东西。
讨论500限额的非官方消息来源:
该公告修复了DoS攻击向量,提供了对 可以为单个HTTP POST提交的变量数 请求。默认限制为500,这对于正常情况应该足够了 Web应用程序,但仍然低到足以抵消攻击 由德国的安全研究人员描述。
编辑:带有限制示例的源代码(似乎是1,000,而不是500) 创建一个标准的MVC应用程序,并将以下代码添加到主索引视图:
@using (Html.BeginForm())
{
<fieldset class="fields">
<p class="submit">
<input type="submit" value="Submit" />
</p>
@for (var i = 0; i < 1000; i++)
{
<div> @Html.CheckBox("cb" + i.ToString(), true) </div>
}
</fieldset>
}
这段代码在补丁之前是有效的。之后就没用了。错误是:
[InvalidOperationException:操作无效,因为当前 对象的状态。]
System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded() +82 System.Web.HttpValueCollection.FillFromEncodedBytes(字节[]字节,编码编码)+111
system.web.httpRequest.FillInformCollection()+307