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

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:

Bollettino Microsoft sulla sicurezza MS11-100 - Critico 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

Serve aiuto?

Amplia le tue competenze
Esplora i corsi di formazione
Ottieni in anticipo le nuove caratteristiche
Partecipa a Microsoft Insider

Queste informazioni sono risultate utili?

Grazie per il feedback!

Grazie per il tuo feedback! Potrebbe essere utile metterti in contatto con uno dei nostri operatori del supporto di Office.

×