Microsoft (29-22-2011) a récemment publié une mise à jour pour corriger plusieurs graves failles de sécurité dans le .NET Framework. L'un des correctifs introduits par MS11-100 atténue temporairement une attaque DoS potentielle impliquant des collisions de tables de hachage. Il semble que ce correctif brise les pages qui contiennent beaucoup de données POST. Dans notre cas, sur les pages qui ont de très grandes listes de cases à cocher. Pourquoi en serait-il ainsi?
Certaines sources non officielles semblent indiquer que MS11-100 place une limite de 500 sur les articles publiés. Je ne trouve pas de source Microsoft qui confirme cela. Je sais que l'état d'affichage et d'autres fonctionnalités du cadre absorbent une partie de cette limite. Y a-t-il un paramètre de configuration qui contrôle cette nouvelle limite? Nous pourrions abandonner l'utilisation des cases à cocher, mais cela fonctionne plutôt bien pour notre situation particulière. Nous aimerions également appliquer le patch car il protège contre d'autres choses désagréables.
Source non officielle discutant de la limite de 500:
Le bulletin corrige le vecteur d'attaque DOS en fournissant une limite au nombre de variables pouvant être soumises pour une seule requête HTTP POST. La limite par défaut est de 500, ce qui devrait être suffisant pour les applications Web normales, mais suffisamment bas pour neutraliser l'attaque, comme l'ont décrit les chercheurs en sécurité en Allemagne.
EDIT: code source avec exemple de limite (qui semble être 1 000 et non 500) Créez une application MVC standard et ajoutez le code suivant à la vue d'index principale:
@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>
}
Ce code fonctionnait avant le patch. Ça ne marche pas après. L'erreur est:
[InvalidOperationException: l'opération n'est pas valide en raison de l'état actuel de l'objet.]
System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded () +82 System.Web.HttpValueCollection.FillFromEncodedBytes (Byte [] byteWeb, Encod System [11 octets), Encod System [11 octets], Encod System [11 octets]
. HttpRequest.FillInFormCollection () +307