微软最近(2011年12月29日)发布了一个更新,以解决网络中的几个严重安全漏洞.NET框架.MS11-100引入的其中一个修复暂时缓解了涉及哈希表冲突的潜在DoS攻击.这个修复程序似乎会 destruct 包含大量帖子数据的页面.在我们的例子中,在有非常大的复选框列表的页面上.为什么会这样?

一些非官方来源似乎表明,MS11-100对回发项目设置了500个的限制.我找不到微软的消息来源来证实这一点.我知道视图状态和其他框架特性消耗了这一限制.是否有任何配置设置来控制此新限制?我们可以不使用复选框,但它在我们的特定情况下工作得相当好.我们还想贴上这个补丁,因为它可以抵御其他一些有害的东西.

Unofficial source discussing the 500 limit:

公告通过提供对DOS攻击矢量的限制来修复DOS攻击矢量 可以为单个HTTP POST提交的变量数 请求.默认限制为500,这对于正常来说应该足够了 Web应用程序,但仍低到足以将攻击中和为 由德国的安全研究人员描述.

编辑:带有limit示例的源代码(看起来是1000,而不是500)

@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:由于当前错误,操作无效

推荐答案

try 在web.config中添加此设置.我刚刚使用ASP.NETMVC2项目在.NET 4.0上测试了这一点,使用此设置,您的代码不会抛出:

<appSettings>
  <add key="aspnet:MaxHttpCollectionKeys" value="1001" />
</appSettings>

现在(在应用安全更新后)应该可以更改限制.


我还没有更新我的机器,所以我使用Reflector判断了HttpValueCollection类,但它没有ThrowIfMaxHttpCollectionKeysExceeded方法:

在此处输入图像描述

我安装了KB2656351(.NET 4.0的更新),在Reflector中重新加载了程序集,出现了以下方法:

在此处输入图像描述

所以这个方法绝对是新的.我在Reflector中使用了Disassemble选项,从代码可以看出,它会判断AppSetting:

if (this.Count >= AppSettings.MaxHttpCollectionKeys)
{
  throw new InvalidOperationException();
}

如果它在网上找不到价值.配置文件,它会将其设置为System.Web.Util.AppSettings.EnsureSettingsLoaded分之System.Web.Util.AppSettings.EnsureSettingsLoaded0(内部静态类):

 _maxHttpCollectionKeys = 0x3e8;

此外,阿列克谢·古萨罗夫(Alexey Gusarov)两天前也在推特上谈到了这种情况:

here是一个Q&;与Jonathan Ness(MSRC安全开发经理)和Pete Voss(Trusty Computing高级响应通信经理)的交流:

问:是AppSettings.MaxHttpCollectionKeys的新参数吗 是否包含表单条目的最大数量?

A:是的,是的.

Asp.net相关问答推荐

.net 中的 [] 括号是什么?

WebResource.axd 上的填充无效且无法删除异常

如何从 dll 文件中提取类的源代码?

IE10 SCRIPT5009:__doPostBack未定义

/应用程序中的服务器错误. ASP.NET

如何使用 javascript 获取 MVC 应用程序的基本 URL

System.Web.Helpers.Crypto - 盐在哪里?

如果站点在 localhost 或 127.0.0.1 上运行,如何判断 ASP.NET MVC 视图

Twitter bootstrap glyphicons 不会出现在发布模式 404 中

发布发布事件

您使用哪个 .NET Memcached 客户端,EnyimMemcached 与 BeITMemcached?

IIS Express - 增加内存限制

您正在使用哪些身份验证和授权方案 - 为什么?

由于文件路径太长,网站发布失败

会员生成密码 仅限字母数字密码?

当用户在文本框中按 Enter 键时执行按钮单击事件

如何将我的 DDD 模型中的用户与身份验证用户集成?

为在 ASP.NET Web API 中使用 User.Identity.Name 的方法编写单元测试

IIS 是否执行非法字符替换?如果是这样,如何阻止它?

在控制器 asp.net-core 中获取当前区域性