Échec avec une exception d'une requête ASP.NET qui comporte nombre de clés de formulaire, de fichiers ou de membres de la charge utile JSON

Traductions disponibles Traductions disponibles
Numéro d'article: 2661403 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Résumé

La mise à jour de sécurité MS11-100 de Microsoft limite le nombre maximal de clés de formulaire, de fichiers et de membres JSON à 1 000 dans une requête HTTP. En raison de cette modification, les applications ASP.NET rejettent les requêtes comportant plus de 1 000 de ces éléments. Les clients HTTP qui envoient de type de requête sont refusés et un message d'erreur s'affiche dans le navigateur Web. Le message d'erreur présente généralement un code d'état HTTP 500. Cette nouvelle limite peut être configurée sur chaque application. Reportez-vous à la section « Résolution » pour obtenir les instructions de configuration.


Symptômes

Les requêtes ASP.NET qui comporte nombre de clés de formulaire, de fichiers ou une charge utile JSON obtiennent une erreur en guise de réponse du serveur. Le journal des applications sur le serveur comporte une entrée Avertissement dont la Source est une version spécifique d'ASP.NET, ainsi que l'ID d'événement 1309. Le journal des événements contient l'un des messages suivants :


Message 1 :
Informations sur l'application :
Domaine d'application : /LM/W3SVC/1/ROOT/<domaine_application>
Niveau de confiance : Moyen
Chemin d'accès virtuel de l'application : <chemin_accès_répertoire_virtuel>
Chemin d'accès de l'application : <chemin_accès_application>
Nom de l'ordinateur : <nom_ordinateur>
Informations sur les processus :
ID processus : 0001
Nom du processus : w3wp.exe
Nom du compte : IIS APPPOOL\DefaultAppPool

Informations sur l'exception :
Type d'exception : HttpException
Message d'exception : Les données de formulaire codées URL ne sont pas valides.
System.Web.HttpRequest.FillInFormCollection()
System.Web.HttpRequest.get_Form()
System.Web.HttpRequest.get_HasForm()
System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull)
System.Web.UI.Page.DeterminePostBackMode()
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)


Message 2 :
Informations sur l'application :
Domaine d'application : /LM/W3SVC/1/ROOT/<domaine_application>
Niveau de confiance : Moyen
Chemin d'accès virtuel de l'application : <chemin_accès_répertoire_virtuel>
Chemin d'accès de l'application : <chemin_accès_application>
Nom de l'ordinateur : <nom_ordinateur>

Informations sur les processus :
ID processus : 0001
Nom du processus : w3wp.exe
Nom du compte : IIS APPPOOL\DefaultAppPool

Informations sur l'exception :
Type d'exception : InvalidOperationException
Message d'exception : L'opération n'est pas valide en raison de l'état actuel de l'objet.
System.Web.HttpRequest.FillInFilesCollection()
System.Web.HttpRequest.get_Files()
FileUpload.Page_Load(Object sender, EventArgs e)
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
System.Web.UI.Control.OnLoad(EventArgs e)
System.Web.UI.Control.LoadRecursive()
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint

Message 3 :
Informations sur l'application :
Domaine d'application : /LM/W3SVC/1/ROOT/<domaine_application>
Niveau de confiance : Moyen
Chemin d'accès virtuel de l'application : <chemin_accès_répertoire_virtuel>
Chemin d'accès de l'application : <chemin_accès_application>
Nom de l'ordinateur : <nom_ordinateur>

Informations sur les processus :
ID processus : 0001
Nom du processus : w3wp.exe
Nom du compte : IIS APPPOOL\DefaultAppPool

Informations sur l'exception :
Type d'exception : InvalidOperationException
Message d'exception : L'opération n'est pas valide en raison de l'état actuel de l'objet.
System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)
System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)
System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)
System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)
System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject(String input)
Failing.Page_Load(Object sender, EventArgs e)
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
System.Web.UI.Control.OnLoad(EventArgs e)
System.Web.UI.Control.LoadRecursive()
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)


Le fichier journal d'IIS affiche une entrée similaire à la suivante :
2011-01-01 00:00:00 ::1 POST /machine/default.aspx - 80 - ::1 - 500 0 0 187




Cause

La mise à jour de sécurité de Microsoft mentionnée par le bulletin de sécurité MS11-100 remplace par 1 000 le nombre maximal par défaut de clés de formulaire, de fichiers et de membres JSON acceptés par ASP.NET dans une requête. Cette modification a été mise en ?uvre pour remédier à la vulnérabilité de type « refus de service » documentée par le bulletin de sécurité Microsoft MS11-100.


Résolution

Les applications qui atteignent cette limite pour les clés de formulaire ou les fichiers peuvent modifier le paramètre appSetting d'ASP.NET aspnet:MaxHttpCollectionKeys, comme illustré ci-dessous dans un fichier de configuration de l'application ASP.NET. Ce paramètre concerne les messages d'erreur 1 et 2 de la section « Symptômes ».
<configuration>
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="1000" />
</appSettings>
</configuration>


Remarque Si vous utilisez ASP.NET 1.1 sur un système x86, le paramètre se définit par l'ajout d'une valeur DWORD à la clé de Registre suivante :

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys
Si vous utilisez ASP.NET 1.1 sur un système x64, le paramètre se définit par l'ajout d'une valeur DWORD à la clé de Registre suivante :

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



Les applications qui atteignent cette limite pour les charges utiles JSON peuvent modifier le paramètre appSetting d'ASP.NET aspnet:MaxJsonDeserializerMembers, comme illustré ci-dessous dans un fichier de configuration de l'application ASP.NET. Ce paramètre concerne le message d'erreur 3 mentionné dans la section « Symptômes ».
<configuration>
<appSettings>
<add key="aspnet:MaxJsonDeserializerMembers" value="1000" />
</appSettings>
</configuration>



Remarque Affecter à ce paramètre une valeur supérieure à celle du paramètre par défaut augmente les chances que votre serveur fasse l'objet d'une vulnérabilité de type « refus de service » mentionnée dans le bulletin de sécurité MS11-100.


Références

Pour plus d'informations sur le bulletin de sécurité MS11-100, reportez-vous à l'article TechNet suivant :
Bulletin de sécurité Microsoft MS11-100 - Critique
Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft.
2638420 MS11-100 : Une vulnérabilité dans .NET Framework pourrait permettre l'élévation de privilèges : 29 décembre 2011

Propriétés

Numéro d'article: 2661403 - Dernière mise à jour: jeudi 29 novembre 2012 - Version: 4.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft .NET Framework 4.0
  • Microsoft .NET Framework 3.5 Service Pack 1
  • Microsoft .NET Framework 3.5
  • Microsoft .NET Framework 2.0 Service Pack 2
  • Microsoft .NET Framework 2.0 Service Pack 1 (x86)
  • Microsoft .NET Framework 2.0
  • Microsoft .NET Framework 1.1 Service Pack 1
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0 Service Pack 3
  • Microsoft .NET Framework 1.0
  • Windows 7 Service Pack 1 sur le système suivant
    • Windows 7 Entreprise
    • Windows 7 Professionnel
    • Windows 7 Édition Integrale
    • Windows 7 Édition Familiale Premium
    • Windows 7 Édition Familiale Basique
  • Windows 7 Entreprise
  • Windows 7 Professionnel
  • Windows 7 Édition Integrale
  • Windows 7 Édition Familiale Premium
  • Windows 7 Édition Familiale Basique
  • Windows Server 2008 R2 Service Pack 1 sur le système suivant
    • Windows Server 2008 R2 Standard
    • Windows Server 2008 R2 Enterprise
    • Windows Server 2008 R2 Datacenter
  • Windows Server 2008 R2 Standard
  • Windows Server 2008 R2 Enterprise
  • Windows Server 2008 R2 Datacenter
  • Windows Server 2008 Service Pack 2 sur le système suivant
    • Windows Server 2008 for Itanium-Based Systems
    • Windows Server 2008 Datacenter
    • Windows Server 2008 Enterprise
    • Windows Server 2008 Standard
    • Windows Web Server 2008
  • Windows Vista Service Pack 2 sur le système suivant
    • Windows Vista Professionnel
    • Windows Vista Entreprise
    • Windows Vista Édition Familiale Basique
    • Windows Vista Édition Familiale Premium
    • Windows Vista Starter
    • Windows Vista Édition Intégrale
    • Windows Vista Entreprise 64 bits
    • Windows Vista Édition Familiale Basique 64 bits
    • Windows Vista Édition Familiale Premium 64 bits
    • Windows Vista Édition Intégrale 64 bits
    • Windows Vista Professionnel 64 bits
  • Microsoft Windows Server 2003 Service Pack 2 sur le système suivant
    • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
    • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
    • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
    • Microsoft Windows Server 2003, Web Edition
    • Microsoft Windows Server 2003, Datacenter x64 Edition
    • Microsoft Windows Server 2003, Enterprise x64 Edition
    • Microsoft Windows Server 2003, Standard x64 Edition
    • Microsoft Windows XP Professional x64 Edition
    • Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems
    • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
  • Microsoft Windows XP Service Pack 3 sur le système suivant
    • Microsoft Windows XP Édition familiale
    • Microsoft Windows XP Professional
Mots-clés : 
atdownload kbbug kbexpertiseinter kbfix kbsecbulletin kbsecurity kbsecvulnerability KB2661403
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com