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>
}
Run Code Online (Sandbox Code Playgroud)
此代码在补丁之前有效.以后它不起作用.错误是:
[InvalidOperationException:由于对象的当前状态,操作无效.]
System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded()+82 System.Web.HttpValueCollection.FillFromEncodedBytes(Byte [] bytes,Encoding encoding)+111
System.Web. HttpRequest.FillInFormCollection()+307
据Slashdot报道,MS发布了ASP.NET更新,以修复今天的哈希冲突攻击.(在链接的Technet页面上列为"HashTable中的冲突可能导致DoS漏洞 - CVE-2011-3414".)
问题是POST数据被转换为使用已知散列算法的散列表.如果攻击者通过制作包含大量冲突的请求来使用此功能,则他很容易导致拒绝服务.
有谁知道该更新究竟是如何解决问题的?
在使用最近发布的asp.net漏洞补丁ms11-100更新我们的系统后,我们发现我们的一些页面开始失败,异常为"[HttpException(0x80004005):URL编码的表单数据无效."这是在这里的asp.net论坛中介绍:
http://forums.asp.net/t/1754512.aspx/1?Microsoft+security+bulletin+MS11+100+breaking+our+site
在这里的stackoverflow:
ASP.NET MS11-100:如何更改已发布表单值的最大数量限制?
我试图通过将该页面移动到它自己的文件夹来限制攻击区域建议的更改到特定页面,这样我就可以在该文件夹中设置一个特定的web.config,其设置为aspnet:MaxHttpCollectionKeys值大于默认值1000.
我发现除非我在根文件夹中的web.config中指定此设置,否则此设置不会生效.看起来asp.net只是忽略了它在页面的新文件夹中的web.config中的设置.
我还需要做些什么来实现这个目标吗?或者根本不可能因为环境的性质?