Recentemente, a Microsoft (29-12-2011) lançou uma atualização para solucionar várias vulnerabilidades graves de segurança no .NET Framework. Uma das correções introduzidas pelo MS11-100 mitiga temporariamente um possível ataque de DoS envolvendo colisões de tabelas de hash. Parece que essa correção quebra as páginas que contêm muitos dados do POST. No nosso caso, em páginas que possuem listas de caixas de seleção muito grandes. Por que isso seria o caso?
Algumas fontes não oficiais parecem indicar que o MS11-100 coloca um limite de 500 em itens de postagem. Não consigo encontrar uma fonte da Microsoft que confirme isso. Eu sei que o View State e outros recursos da estrutura consomem parte desse limite. Existe alguma configuração que controla esse novo limite? Poderíamos deixar de usar caixas de seleção, mas funciona muito bem para nossa situação específica. Também gostaríamos de aplicar o patch, pois ele protege contra outras coisas desagradáveis.
Fonte não oficial discutindo o limite de 500:
O boletim corrige o vetor de ataque do DOS, fornecendo um limite para o número de variáveis que podem ser enviadas para uma única solicitação HTTP POST. O limite padrão é 500, o que deve ser suficiente para aplicativos da Web normais, mas ainda baixo o suficiente para neutralizar o ataque, conforme descrito pelos pesquisadores de segurança na Alemanha.
EDIT: Código-fonte com exemplo de limite (que parece ser 1.000, e não 500) Crie um aplicativo MVC padrão e adicione o seguinte código à exibição principal do índice:
@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>
}
Este código funcionou antes do patch. Não funciona depois. O erro é:
[InvalidOperationException: operação não é válida devido ao estado atual do objeto.]
System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded () +82 System.Web.HttpValueCollection.FillFromEncodedBytes (Byte [] bytes, Encoding1.de)
. HttpRequest.FillInFormCollection () +307