Uma solicitação ASP.NET que possui muitas chaves de formulário, arquivos ou membros de carga JSON falha com uma exceção

Traduções deste artigo Traduções deste artigo
ID do artigo: 2661403 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Sumário

A atualização de segurança MS11-100 da Microsoft limita o número máximo de chaves de formulário, arquivos e membros JSON para 1000 em uma solicitação HTTP. Por causa desta alteração, os aplicativos ASP.NET rejeitam solicitações que possuem mais do que 1000 destes elementos. Os clientes HTTP que fazem estes tipos de solicitação serão negados e uma mensagem de erro aparecerá no navegador da Web. A mensagem de erro geralmente terá um código de status HTTP 500. Este novo limite pode ser configurado em uma base por aplicativo. Consulte a seção "Resolução" para obter instruções de configuração.


Sintomas

As solicitações ASP.NET que têm várias chaves de formulário, arquivos ou carga JSON recebem uma resposta de erro do servidor. O Aplicativo faz logon no servidor que tem uma entrada Aviso com uma Fonte da versão específica do ASP.NET e um ID de Evento de 1309. O log do evento contém uma das seguintes mensagens: 


Mensagem 1:
Informação do aplicativo:
Domínio do aplicativo: /LM/W3SVC/1/ROOT/<Domínio do Aplicativo>
Nível de confiança: Médio
Caminho Virtual do Aplicativo: <Caminho VDIR>
Caminho do Aplicativo: <Caminho do Aplicativo>
Nome da máquina: <Nome da máquina>
Informação do processo:
ID do Processo: 0001
Nome do processo: w3wp.exe
Nome da conta: IIS APPPOOL\DefaultAppPool

Informações da exceção:
Tipo de exceção: HttpException
Mensagem da exceção: Os dados do formulário codificado URL não são válidos.
at System.Web.HttpRequest.FillInFormCollection()
at System.Web.HttpRequest.get_Form()
at System.Web.HttpRequest.get_HasForm()
at System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull)
at System.Web.UI.Page.DeterminePostBackMode()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)


Mensagem 2:
Informação do aplicativo:
Domínio do aplicativo: /LM/W3SVC/1/ROOT/<Domínio do Aplicativo>
Nível de confiança: Médio
Caminho Virtual do Aplicativo: <Caminho VDIR>
Caminho do Aplicativo: <Caminho do Aplicativo>
Nome da máquina: <Nome da máquina>

Informação do processo:
ID do Processo: 0001
Nome do processo: w3wp.exe
Nome da conta: IIS APPPOOL\DefaultAppPool

Informações da exceção:
Tipo de exceção: InvalidOperationException
Mensagem da exceção: A operação não é válida devido ao estado atual do objeto.
at System.Web.HttpRequest.FillInFilesCollection()
at System.Web.HttpRequest.get_Files()
at FileUpload.Page_Load(Object sender, EventArgs e)
at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
at System.Web.UI.Control.OnLoad(EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint

Mensagem 3:
Informação do aplicativo:
Domínio do aplicativo: /LM/W3SVC/1/ROOT/<Domínio do Aplicativo>
Nível de confiança: Médio
Caminho Virtual do Aplicativo: <Caminho VDIR>
Caminho do Aplicativo: <Caminho do Aplicativo>
Nome da máquina: <Nome da máquina>

Informação do processo:
ID do Processo: 0001
Nome do processo: w3wp.exe
Nome da conta: IIS APPPOOL\DefaultAppPool

Informações da exceção:
Tipo de exceção: InvalidOperationException
Mensagem da exceção: A operação não é válida devido ao estado atual do objeto.
at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)
at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)
at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)
at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)
at System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject(String input)
at Failing.Page_Load(Object sender, EventArgs e)
at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
at System.Web.UI.Control.OnLoad(EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)


O arquivo de log do IIS mostra uma entrada que se parece com a seguinte:
2011-01-01 00:00:00 ::1 POST /machine/default.aspx - 80 - ::1 - 500 0 0 187




Causa

A atualização de segurança da Microsoft que o boletim de segurança MS11-100 resolve altera o número máximo padrão de chaves de formulários, arquivos e membros JSON que o ASP.NET irá aceitar em uma solicitação para 1.000. Esta alteração foi feita para resolver a vulnerabilidade da Negação de Serviço que o boletim de segurança MS11-100 da Microsoft documenta.


Resolução

Os aplicativos que atingem este limite para as chaves de formulários ou arquivos podem modificar o appSetting do ASP.NET aspnet:MaxHttpCollectionKeys, como mostrado abaixo no arquivo de configuração do aplicativo ASP.NET. Esta configuração resolve as mensagens de erro 1 e 2 na seção "Sintomas".
<configuration>
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="1000" />
</appSettings>
</configuration>


Observação Se você estiver usando o ASP.NET 1.1 em um sistema baseado em x86, a configuração é ajustada com a adição de um valor DWORD à seguinte chave do registro:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys
Se você estiver usando o ASP.NET 1.1 em um sistema baseado em x64, a configuração é ajustada com a adição de um valor DWORD à seguinte chave do registro:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys



Os aplicativos que atingem este limite para cargas JSON podem modificar o appSetting do ASP.NET aspnet:MaxJsonDeserializerMembers, como mostrado abaixo em um arquivo de configuração do aplicativo ASP.NET. Esta configuração resolve a mensagem de erro 3 na seção "Sintomas".
<configuration>
<appSettings>
<add key="aspnet:MaxJsonDeserializerMembers" value="1000" />
</appSettings>
</configuration>



Observação Aumentar este valor acima da configuração padrão aumenta a suscetibilidade do seu servidor à vulnerabilidade da Negação de Serviço discutida no boletim de segurança MS11-100.


Referências

Para obter mais informações sobre o boletim de segurança MS11-100, consulte o seguinte artigo da TechNet:
Boletim de Segurança da Microsoft MS11-100 - Crítico
Para obter mais informações, clique no número a seguir para ler o artigo na Base de Dados de Conhecimento da Microsoft:
2638420 MS11-100: Vulnerabilidade no .NET Framework pode permitir a elevação de privilégio: 29 de dezembro de 2011

Propriedades

ID do artigo: 2661403 - Última revisão: quinta-feira, 29 de novembro de 2012 - Revisão: 4.0
A informação contida neste artigo aplica-se a:
  • Microsoft .NET Framework 4.0
  • Microsoft .NET Framework 3.5 Service Pack 1
  • Microsoft .NET Framework 3.5
  • Microsoft .NET Framework 2.0 Service Pack 2
  • Microsoft .NET Framework 2.0 Service Pack 1 (x86)
  • Microsoft .NET Framework 2.0
  • Microsoft .NET Framework 1.1 Service Pack 1
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0 Service Pack 3
  • Microsoft .NET Framework 1.0
  • Windows 7 Service Pack 1 nas seguintes plataformas
    • Windows 7 Enterprise
    • Windows 7 Professional
    • Windows 7 Ultimate
    • Windows 7 Home Premium
    • Windows 7 Home Basic
  • Windows 7 Enterprise
  • Windows 7 Professional
  • Windows 7 Ultimate
  • Windows 7 Home Premium
  • Windows 7 Home Basic
  • Windows Server 2008 R2 Service Pack 1 nas seguintes plataformas
    • Windows Server 2008 R2 Standard
    • Windows Server 2008 R2 Enterprise
    • Windows Server 2008 R2 Datacenter
  • Windows Server 2008 R2 Standard
  • Windows Server 2008 R2 Enterprise
  • Windows Server 2008 R2 Datacenter
  • Windows Server 2008 Service Pack 2 nas seguintes plataformas
    • Windows Server 2008 for Itanium-Based Systems
    • Windows Server 2008 Datacenter
    • Windows Server 2008 Enterprise
    • Windows Server 2008 Standard
    • Windows Web Server 2008
  • Windows Vista Service Pack 2 nas seguintes plataformas
    • Windows Vista Business
    • Windows Vista Enterprise
    • Windows Vista Home Basic
    • Windows Vista Home Premium
    • Windows Vista Starter
    • Windows Vista Ultimate
    • Windows Vista Enterprise 64-bit edition
    • Windows Vista Home Basic 64-bit edition
    • Windows Vista Home Premium 64-bit edition
    • Windows Vista Ultimate 64-bit edition
    • Windows Vista Business 64-bit edition
  • Microsoft Windows Server 2003 Service Pack 2 nas seguintes plataformas
    • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
    • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
    • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
    • Microsoft Windows Server 2003, Web Edition
    • Microsoft Windows Server 2003, Datacenter x64 Edition
    • Microsoft Windows Server 2003, Enterprise x64 Edition
    • Microsoft Windows Server 2003, Standard x64 Edition
    • Microsoft Windows XP Professional x64 Edition
    • Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems
    • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
  • Service Pack 3 para Windows XP nas seguintes plataformas
    • Microsoft Windows XP Home Edition
    • Microsoft Windows XP Professional
Palavras-chave: 
atdownload kbbug kbexpertiseinter kbfix kbsecbulletin kbsecurity kbsecvulnerability KB2661403

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com