Microsoft recientemente (29-12-2011) lanzó una actualización para abordar varias vulnerabilidades de seguridad graves en .NET Framework. Una de las soluciones introducidas por MS11-100 mitiga temporalmente un posible ataque DoS que involucra colisiones de tablas hash. Parece que esta solución rompe páginas que contienen muchos datos POST. En nuestro caso, en páginas que tienen listas de casillas de verificación muy grandes. Por qué sería este el caso?
Algunas fuentes no oficiales parecen indicar que MS11-100 establece un límite de 500 en artículos de devolución. No puedo encontrar una fuente de Microsoft que confirme esto. Sé que View State y otras características del marco consumen parte de este límite. ¿Hay alguna configuración que controle este nuevo límite? Podríamos dejar de usar casillas de verificación, pero funciona bastante bien para nuestra situación particular. También nos gustaría aplicar el parche porque protege contra otras cosas desagradables.
Fuente no oficial que discute el límite de 500:
El boletín corrige el vector de ataque de DOS al proporcionar un límite al número de variables que se pueden enviar para una sola solicitud HTTP POST. El límite predeterminado es 500, que debería ser suficiente para las aplicaciones web normales, pero lo suficientemente bajo como para neutralizar el ataque como lo describen los investigadores de seguridad en Alemania.
EDITAR: Código fuente con ejemplo de límite (que parece ser 1,000, no 500) Cree una aplicación MVC estándar y agregue el siguiente código a la vista del índice principal:
@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 funcionó antes del parche. No funciona después. El error es:
[InvalidOperationException: la operación no es válida debido al estado actual del objeto.]
System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded () +82 System.Web.HttpValueCollection.FillFromEncodedBytes (Byteding)
. HttpRequest.FillInFormCollection () +307