Microsoft 最近 (12-29-2011) 发布了一个更新,以解决 .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[] bytes, Encoding encoding) +111
System.Web。 HttpRequest.FillInFormCollection() +307