Microsoft a récemment (12-29-2011) a publié une mise à jour de l'adresse de plusieurs graves failles de sécurité dans le .NET Framework. L'un des correctifs introduits par MS11-100 temporairement atténue un potentiel d'attaque de déni de service impliquant la table de hachage de collisions. Il apparaît que ce corriger les sauts de pages qui contiennent beaucoup de données POST. Dans notre cas, sur les pages qui ont une très grande case à cocher listes. Pourquoi serait-ce le cas?
Certaines sources non officielles, semblent indiquer que MS11-100 places une limite de 500 sur la publication des articles. Je ne peux pas trouver une source Microsoft qui confirme ce. Je sais que l'État d'Affichage et d'autres fonctionnalités d'infrastructure de manger certains de cette limite. Est-il un paramètre de configuration qui contrôle cette nouvelle limite? Nous pourrions nous passer de l'aide des cases à cocher, mais il fonctionne plutôt bien pour notre cas particulier. Nous aimerions également appliquer le patch, car il protège contre certaines autres choses désagréables.
Source non officielle de discuter de la limite de 500:
Le bulletin résout le DOS vecteur d'attaque en fournissant une limite à la certain nombre de variables qui peuvent être soumis à un seul HTTP POST demande. La limite par défaut est de 500 qui devrait être suffisant pour la normale les applications web, mais encore assez faible pour neutraliser l'attaque comme décrit par les chercheurs en sécurité en Allemagne.
EDIT: le code Source de l'exemple de la limite (qui semble être de 1 000, pas 500) Créer un standard MVC application et ajoutez le code suivant à l'indice principal de la vue:
@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 a travaillé avant le patch. Il ne fonctionne pas après. L'erreur est:
[InvalidOperationException: Opération n'est pas valide en raison de l'actuelle état de l'objet.]
Système.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded() +82 Système.Web.HttpValueCollection.FillFromEncodedBytes(Byte[] bytes, Encoding) +111
Système.Web.HttpRequest.FillInFormCollection() +307