Iniciar sessão com a Microsoft
Iniciar sessão ou criar uma conta.
Olá,
Selecione uma conta diferente.
Tem várias contas
Selecione a conta com a qual pretende iniciar sessão.

Sumário

A actualização de segurança MS11-100 da Microsoft limita o número máximo de chaves de formulários, ficheiros e membros JSON para 1000 num pedido HTTP. Devido a esta alteração, as aplicações ASP.NET rejeitam os pedidos que possuam mais de 1000 destes elementos. Os clientes HTTP que efectuam estes tipos de pedidos serão negados e aparecerá uma mensagem de erro no browser. A mensagem de erro terá geralmente um código de estado HTTP 500. Este novo limite pode ser configurado numa base por aplicação. Consulte a secção "Resolução" para ver as instruções de configuração.


Sintomas

Os pedidos ASP.NET que possuam muitas chaves de formulários, ficheiros ou payloads JSON recebem uma resposta de erro do servidor. O registo da Aplicação no servidor possui uma entrada de Aviso com uma Origem que é uma versão específica do ASP.NET e uma ID do Evento de 1309. O registo do evento contém uma das mensagens seguintes:


Mensagem 1:

Informações da aplicação:
Domínio da aplicação: /LM/W3SVC/1/ROOT/<Domínio de Aplicação>
Nível de Fidedignidade: Média
Caminho Virtual da Aplicação: <Caminho VDIR>
Caminho da Aplicação: <Caminho da Aplicação>
Nome da máquina: <Nome da Máquina>
Informações do processo:
ID de processo: 0001
Nome do processo: w3wp.exe
Nome da conta: IIS APPPOOL\DefaultAppPool

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


Mensagem 2:

Informações da aplicação:
Domínio da aplicação: /LM/W3SVC/1/ROOT/<Domínio de Aplicação>
Nível de Fidedignidade: Média
Caminho Virtual da Aplicação: <Caminho VDIR>
Caminho da Aplicação: <Caminho da Aplicação>
Nome da máquina: <Nome da Máquina>

Informações do processo:
ID de processo: 0001
Nome do processo: w3wp.exe
Nome da conta: IIS APPPOOL\DefaultAppPool

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


Mensagem 3:

Informações da aplicação:
Domínio da aplicação: /LM/W3SVC/1/ROOT/<Domínio de Aplicação>
Nível de Fidedignidade: Média
Caminho Virtual da Aplicação: <Caminho VDIR>
Caminho da Aplicação: <Caminho da Aplicação>
Nome da máquina: <Nome da Máquina>

Informações do processo:
ID de processo: 0001
Nome do processo: w3wp.exe
Nome da conta: IIS APPPOOL\DefaultAppPool

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



O ficheiro de registo dos IIS mostra uma entrada semelhante à que se segue:

2011-01-01 00:00:00 ::1 POST /machine/default.aspx - 80 - ::1 - 500 0 0 187




Causa

A actualização de segurança da Microsoft que o boletim de segurança MS11-100 corrige altera o número predefinido máximo de chaves de formulários, ficheiros e membros JSON que o ASP.NET irá aceitar num pedido para 1000. Esta alteração foi feita para corrigir a vulnerabilidade ao Denial of Service que o boletim de segurança MS11-100 da Microsoft refere.


Resolução

As aplicações que atingem este limite para chaves de formulários ou ficheiros podem modificar a appSetting do ASP.NET aspnet:MaxHttpCollectionKeys, conforme indicado abaixo num ficheiro de configuração de uma aplicação ASP.NET. Esta definição corrige a mensagem 1 de erro e a mensagem 2 de erro da secção "Sintomas".

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



Nota Se estiver a utilizar o ASP.NET 1.1 num sistema baseado em x86, a definição é ajustada acrescentando um valor DWORD à seguinte chave de registo:

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

Se estiver a utilizar o ASP.NET 1.1 num sistema baseado em x64, a definição é ajustada acrescentando um valor DWORD à seguinte chave de registo:

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




As aplicações que atingem este limite para payloads JSON podem modificar a appSetting do ASP.NET aspnet:MaxJsonDeserializerMembers, conforme indicado abaixo num ficheiro de configuração de uma aplicação ASP.NET. Esta definição corrige a mensagem 3 de erro da secção "Sintomas".

<configuration>
<appSettings>
<add key="aspnet:MaxJsonDeserializerMembers" value="1000" />
</appSettings>
</configuration>




Nota Aumentar este valor para acima da predefinição aumenta a susceptibilidade do seu servidor à vulnerabilidade ao Denial of Service, que é 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 de artigo seguinte para visualizar o artigo na Base de Dados de Conhecimento Microsoft:

2638420 MS11-100: Vulnerabilidade no .NET Framework pode permitir a elevação de privilégios: 29 de Dezembro de 2011

Precisa de mais ajuda?

Quer mais opções?

Explore os benefícios da subscrição, navegue em cursos de formação, saiba como proteger o seu dispositivo e muito mais.

As comunidades ajudam-no a colocar e a responder perguntas, a dar feedback e a ouvir especialistas com conhecimentos abrangentes.

Estas informações foram úteis?

Quão satisfeito está com a qualidade do idioma?
O que afetou a sua experiência?
Ao selecionar submeter, o seu feedback será utilizado para melhorar os produtos e serviços da Microsoft. O seu administrador de TI poderá recolher estes dados. Declaração de Privacidade.

Obrigado pelo seu feedback!

×