Microsoft最近(2011年12月29日)发布了一个更新程序,以解决.NET Framework中的若干严重安全漏洞。MS11-100引入的修补程序之一可暂时缓解潜在的涉及哈希表冲突的DoS攻击。似乎此修复程序破坏了包含大量POST数据的页面。在我们的例子中,复选框列表非常大的页面上。为什么会这样呢?
一些非官方消息来源似乎表明,MS11-100对回发项目的限制是500。我找不到可以证实这一点的Microsoft资源。我知道View State和其他框架功能会吃掉这个限制。是否有任何控制此新限制的配置设置?我们可以放弃使用复选框,但是在我们的特定情况下效果很好。我们还想应用补丁,因为它可以防止其他令人讨厌的事情。
该公告通过限制可以为单个HTTP POST请求提交的变量数量来修复DOS攻击向量。默认限制为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(Byte []个字节,编码编码)+111
System.Web。 HttpRequest.FillInFormCollection()+307