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

一些非官方来源似乎表明,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相关问答推荐

带有 IIS 的 ASP.NET Core - 不允许使用 HTTP 动词

为什么从 ASP.NET Core Web API 的 ControllerBase 与 Controller 派生?

IConfiguration 不包含 GetValue 的定义

我迷路了. ASP.NET MVC 5 发生了什么?

为什么混合 Razor Pages 和 VueJs 是一件坏事?

我可以在 .net 核心中使用 Entity Framework 6(非核心)吗?

C# ASP.NET Core Serilog 添加类名和方法到日志(log)

ASP.NET Core 2.0 为同一端点结合了 Cookie 和承载授权

.NET 框架 3.5 和 TLS 1.2

使用 Visual Studio 2017 的 .NET Core 解决方案上没有 project.json、global.json ... 等

Visual Studio 不要打开新的浏览器实例

.NET Core Identity Server 4 身份验证 VS 身份验证

没有注册类型“Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory”的服务

带有 ASP.NET MVC 6 锚标记助手的 QueryString

ASP.Net Core MVC - 自定义属性的客户端验证

在 ASP.NET Core 1.0 上处理大文件上传

为什么 IFormFile 显示为空,我该如何解决?

如何获取部署在 Azure 网站上的 ASP.NET 5 应用程序的错误详细信息?

UseSqlServer 方法缺少 MVC 6

找不到路径的一部分... bin\roslyn\csc.exe