Una richiesta ASP.NET contenente molte chiavi del modulo modulo, file o membri di payload JSON non riesce con un'eccezione

Il supporto per Windows XP è terminato

Il supporto Microsoft per Windows XP è terminato l'8 aprile 2014. Questa modifica ha interessato gli aggiornamenti software e le opzioni di sicurezza. Ulteriori informazioni su come continuare a essere protetti.

Il supporto per Windows Server 2003 è terminato il 14 luglio 2015.

Microsoft ha sospeso il supporto per Windows Server 2003 in data 14 luglio 2015. Questa modifica ha interessato gli aggiornamenti software e le opzioni di sicurezza. Ulteriori informazioni su come continuare a essere protetti.

Sommario
L'aggiornamento della sicurezza Microsoft MS11-100 limita il numero massimo di chiavi del modulo, file e membri JSON a 1000 in una richiesta HTTP. A causa di questa modifica, le applicazioni ASP.NET rifiutano le richieste con più di 1000 elementi di questo tipo. Verranno rifiutati i client HTTP che effettuano questi tipi di richieste e verrà visualizzato un messaggio di errore nel browser Web. Il messaggio di errore conterrà un codice di stato 500 HTTP. È possibile che questo nuovo limite venga configurato in base all'applicazione. Per istruzioni relative alla configurazione, vedere la sezione "Risoluzione".


Sintomi
Per le richieste ASP.NET con molte chiavi del modulo, file oppure payload JSON viene visualizzata una risposta di errore dal server. Il registro applicazioni sul server dispone di un Avviso con un'Origine che rappresenta una versione specifica di ASP.NET e un ID evento di 1309. Il registro eventi contiene uno dei seguenti messaggi:


Messaggio 1:
Informazioni dell'applicazione:
Dominio dell'applicazione: /LM/W3SVC/1/ROOT/<App Domain>
Livello di attendibilità: Medio
Percorso virtuale dell'applicazione: <Percorso VDIR>
Percorso dell'applicazione: <Percorso app>
Nome computer: <Nome computer>
Informazioni sul processo:
ID processo: 0001
Nome processo: w3wp.exe
Nome account: IIS APPPOOL\DefaultAppPool

Informazioni sull'eccezione:
Tipo di eccezione: HttpException
Messaggio eccezione: I dati del modulo con codifica URL non sono validi.
in System.Web.HttpRequest.FillInFormCollection()
in System.Web.HttpRequest.get_Form()
in System.Web.HttpRequest.get_HasForm()
in System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull)
in System.Web.UI.Page.DeterminePostBackMode()
in System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)


Messaggio 2:
Informazioni dell'applicazione:
Dominio dell'applicazione: /LM/W3SVC/1/ROOT/<App Domain>
Livello di attendibilità: Medio
Percorso virtuale dell'applicazione: <Percorso VDIR>
Percorso dell'applicazione: <Percorso app>
Nome computer: <Nome computer>

Informazioni sul processo:
ID processo: 0001
Nome processo: w3wp.exe
Nome account: IIS APPPOOL\DefaultAppPool

Informazioni sull'eccezione:
Tipo di eccezione: InvalidOperationException
Messaggio eccezione: Operazione non valida a causa dello stato corrente dell'oggetto.
in System.Web.HttpRequest.FillInFilesCollection()
in System.Web.HttpRequest.get_Files()
in FileUpload.Page_Load(Object sender, EventArgs e)
in System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
in System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
in System.Web.UI.Control.OnLoad(EventArgs e)
in System.Web.UI.Control.LoadRecursive()
in System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint

Messaggio 3:
Informazioni dell'applicazione:
Dominio dell'applicazione: /LM/W3SVC/1/ROOT/<App Domain>
Livello di attendibilità: Medio
Percorso virtuale dell'applicazione: <Percorso VDIR>
Percorso dell'applicazione: <Percorso app>
Nome computer: <Nome computer>

Informazioni sul processo:
ID processo: 0001
Nome processo: w3wp.exe
Nome account: IIS APPPOOL\DefaultAppPool

Informazioni sull'eccezione:
Tipo di eccezione: InvalidOperationException
Messaggio eccezione: Operazione non valida a causa dello stato corrente dell'oggetto.
in System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)
in System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)
in System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)
in System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)
in System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject(String input)
in Failing.Page_Load(Object sender, EventArgs e)
in System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
in System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
in System.Web.UI.Control.OnLoad(EventArgs e)
in System.Web.UI.Control.LoadRecursive()
in System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)


Il file di registro IIS visualizza una voce simile alla seguente:
2011-01-01 00:00:00 ::1 POST /machine/default.aspx - 80 - ::1 - 500 0 0 187




Cause
L'aggiornamento della sicurezza Microsoft relativo al Bollettino Microsoft sulla sicurezza MS11-100 modifica il numero massimo predefinito di chiavi del modulo, file e membri JSON che ASP.NET accetterà in una richiesta a 1.000. Questa modifica è stata introdotta per risolvere il problema di vulnerabilità Denial of Service documentato nel Bollettino Microsoft sulla sicurezza MS11-100.


Risoluzione
Le applicazioni che raggiungono questo limite per le chiavi del modulo o per i file possono modificare l'impostazione dell'applicazione (appSetting) ASP.NET aspnet:MaxHttpCollectionKeys, come mostrato in un file di configurazione dell'applicazione ASP.NET. Questa impostazione risolve il messaggio di errore 1 e 2 dalla sezione "Sintomi".
<configuration><appSettings><add key="aspnet:MaxHttpCollectionKeys" value="1000" /></appSettings></configuration>


Nota Se si utilizza ASP.NET 1.1 in un sistema basato su x86, l'impostazione viene modificata aggiungendo un valore DWORD alla seguente chiave del Registro di sistema:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys
Se si utilizza ASP.NET 1.1 in un sistema basato su x64, l'impostazione viene modificata aggiungendo un valore DWORD alla seguente chiave del Registro di sistema:

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



Le applicazioni che riscontrano questo limite per i payload JSON possono modificare l'impostazione dell'applicazione (appSetting) ASP.NET aspnet:MaxJsonDeserializerMembers, come mostrato in un file di configurazione dell'applicazione ASP.NET. Questa impostazione risolve il messaggio di errore 3 dalla sezione "Sintomi".
<configuration><appSettings><add key="aspnet:MaxJsonDeserializerMembers" value="1000" /></appSettings></configuration>



Nota L'aumento di questo valore al di sopra dell'impostazione predefinita, aumenta la sensibilità del server relativa al problema di vulnerabilità Denial of Service illustrato nel Bollettino Microsoft sulla sicurezza MS11-100.


Riferimenti
Per ulteriori informazioni sul Bollettino Microsoft sulla sicurezza MS11-100, vedere il seguente articolo TechNet: Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
2638420 MS11-100: Possibile elevazione dei privilegi a causa di vulnerabilità in .NET Framework: 29 dicembre 2011
Proprietà

ID articolo: 2661403 - Ultima revisione: 11/29/2012 14:34:00 - Revisione: 4.0

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, Windows 7 Enterprise, Windows 7 Professional, Windows 7 Ultimate, Windows 7 Home Premium, Windows 7 Home Basic, Windows Server 2008 R2 Service Pack 1, Windows Server 2008 R2 Standard, Windows Server 2008 R2 Enterprise, Windows Server 2008 R2 Datacenter, Windows Server 2008 Service Pack 2, Windows Vista Service Pack 2, Microsoft Windows Server 2003 Service Pack 2, Microsoft Windows XP Service Pack 3

  • atdownload kbbug kbexpertiseinter kbfix kbsecbulletin kbsecurity kbsecvulnerability KB2661403
Feedback