Se produce en error con una excepción en una solicitud ASP.NET que contiene muchos miembros de carga JSON, archivos o claves de formulario

Seleccione idioma Seleccione idioma
Id. de artículo: 2661403 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Resumen

La actualización de seguridad MS11-100 de Microsoft limita el número máximo de miembros JSON, archivos y claves de formulario a 1000 en una solicitud HTTP. Debido a este cambio, las aplicaciones ASP.NET rechazan las solicitudes que contengan una cantidad de estos elementos superior a 1000. Los clientes HTTP que realicen estos tipos de solicitudes serán denegados y aparecerá un mensaje de error en el explorador web. El mensaje de error tendrá normalmente un código de estado HTTP 500. Este nuevo límite puede configurarse en función de las aplicaciones. Consulte la sección "Resolución" para obtener instrucciones de configuración.


Síntomas

Las solicitudes ASP.NET que contienen mucha carga JSON, archivos o claves de formulario reciben una respuesta de error del servidor. El registro de Aplicación del servidor tiene una entrada de Advertencia con un Origen que es una versión específica de ASP.NET y un id. de evento de 1309. El registro de eventos contiene uno de los mensajes siguientes:


Mensaje 1:
Información de la aplicación:
Dominio de aplicación: /LM/W3SVC/1/ROOT/<Dominio de aplicación>
Nivel de confianza: Medio
Ruta de acceso virtual de la aplicación: <Ruta de acceso de VDIR>
Ruta de acceso de la aplicación: <Ruta de acceso de la aplicación>
Nombre del equipo: <Nombre del equipo>
Información de proceso:
Id. de proceso: 0001
Nombre del proceso: w3wp.exe
Nombre de cuenta: IIS APPPOOL\DefaultAppPool

Información de excepción:
Tipo de excepción: HttpException
Mensaje de excepción: Los datos de formulario con codificación URL no son válidos.
en System.Web.HttpRequest.FillInFormCollection()
en System.Web.HttpRequest.get_Form()
en System.Web.HttpRequest.get_HasForm()
en System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull)
en System.Web.UI.Page.DeterminePostBackMode()
en System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 


Mensaje 2:
Información de la aplicación:
Dominio de aplicación: /LM/W3SVC/1/ROOT/<Dominio de aplicación>
Nivel de confianza: medio
Ruta de acceso virtual de la aplicación: <ruta de acceso de VDIR>
Ruta de acceso de la aplicación: <ruta de acceso de la aplicación>
Nombre del equipo: <nombre del equipo>

Información del proceso:
Id. del proceso: 0001
Nombre del proceso: w3wp.exe
Nombre de cuenta: IIS APPPOOL\DefaultAppPool

Información de excepción:
Tipo de excepción: InvalidOperationException
Mensaje de excepción: La operación no es válida debido al estado actual del objeto.
en System.Web.HttpRequest.FillInFilesCollection()
en System.Web.HttpRequest.get_Files()
en FileUpload.Page_Load(Object sender, EventArgs e)
en System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
en System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
en System.Web.UI.Control.OnLoad(EventArgs e)
en System.Web.UI.Control.LoadRecursive()
en System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint

Mensaje 3:
Información de la aplicación:
Dominio de aplicación: /LM/W3SVC/1/ROOT/<Dominio de aplicación>
Nivel de confianza: medio
Ruta de acceso virtual de la aplicación: <ruta de acceso de VDIR>
Ruta de acceso de la aplicación: <ruta de acceso de la aplicación>
Nombre del equipo: <nombre del equipo>

Información del proceso:
Id. del proceso: 0001
Nombre del proceso: w3wp.exe
Nombre de cuenta: IIS APPPOOL\DefaultAppPool

Información de excepción:
Tipo de excepción: InvalidOperationException
Mensaje de excepción: la operación no es válida debido al estado actual del objeto.
en System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)
en System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)
en System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)
en System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)
en System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject(String input)
en Failing.Page_Load(Object sender, EventArgs e)
en System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
en System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
en System.Web.UI.Control.OnLoad(EventArgs e)
en System.Web.UI.Control.LoadRecursive()
en System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 


El archivo de registro de IIS muestra una entrada similar a la siguiente:
2011-01-01 00:00:00 ::1 POST /machine/default.aspx - 80 - ::1 - 500 0 0 187




Causa

La actualización de seguridad de Microsoft a la que se refiere el boletín de seguridad MS11-100 cambia el número máximo predeterminado de miembros JSON, archivos y claves de formulario que ASP.NET aceptará en una solicitud a 1000. Se ha realizado este cambio para solucionar la vulnerabilidad de denegación de servicio que documenta el boletín de seguridad MS11-100 de Microsoft.


Solución

Las aplicaciones que alcanzan este límite de archivos o claves de formulario pueden modificar el appSetting de ASP.NET aspnet:MaxHttpCollectionKeys, como se muestra a continuación en un archivo de configuración de la aplicación ASP.NET. Esta configuración soluciona el mensaje de error 1 y el mensaje de error 2 de la sección "Síntomas".
<configuration>
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="1000" />
</appSettings>
</configuration>


Nota: si utiliza ASP.NET 1.1 en un sistema basado en x86, la configuración se cambia agregando un valor DWORD a la siguiente clave del Registro:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys
Si utiliza ASP.NET 1.1 en un sistema basado en x64, la configuración se cambia agregando un valor DWORD a la siguiente clave del Registro:

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



Las aplicaciones que alcanzan este límite con las cargas JSON pueden modificar el appSetting de ASP.NET aspnet:MaxJsonDeserializerMembers, como se muestra a continuación en un archivo de configuración de la aplicación ASP.NET. Esta configuración soluciona el mensaje de error 3 de la sección "Síntomas".
<configuración>
<appSettings>
<add key="aspnet:MaxJsonDeserializerMembers" value="1000" />
</appSettings>
</configuration>



Nota: si aumenta este valor en la configuración predeterminada, aumenta la probabilidad de que su servidor sufra la vulnerabilidad de denegación de servicio que se trata en el boletín de seguridad MS11-100.


Referencias

Para obtener más información acerca del boletín de seguridad MS11-100, consulte el siguiente artículo de TechNet:
Microsoft Security Bulletin MS11-100 - crítica
Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
2638420 MS11-100: una vulnerabildad en .NET Framework podría permitir la elevación de privilegios: 29 de diciembre de 2011

Propiedades

Id. de artículo: 2661403 - Última revisión: jueves, 29 de noviembre de 2012 - Versión: 4.0
La información de este artículo se refiere a:
  • 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 sobre las siguientes plataformas
    • Windows 7 Enterprise
    • Windows 7 Professional
    • Windows 7 Ultimate
    • Windows 7 Home Premium
    • Windows 7 Home Basic
  • Windows 7 Enterprise
  • Windows 7 Professional
  • Windows 7 Ultimate
  • Windows 7 Home Premium
  • Windows 7 Home Basic
  • Windows Server 2008 R2 Service Pack 1 sobre las siguientes plataformas
    • 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 sobre las siguientes plataformas
    • 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 sobre las siguientes plataformas
    • Windows Vista Business
    • Windows Vista Enterprise
    • Windows Vista Home Basic
    • Windows Vista Home Premium
    • Windows Vista Starter
    • Windows Vista Ultimate
    • Windows Vista Enterprise 64-bit edition
    • Windows Vista Home Basic 64-bit edition
    • Windows Vista Home Premium 64-bit edition
    • Windows Vista Ultimate 64-bit edition
    • Windows Vista Business 64-bit edition
  • Microsoft Windows Server 2003 Service Pack 2 sobre las siguientes plataformas
    • 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
  • Service Pack 3 para Microsoft Windows XP sobre las siguientes plataformas
    • Microsoft Windows XP Home Edition
    • Microsoft Windows XP Professional
Palabras clave: 
atdownload kbbug kbexpertiseinter kbfix kbsecbulletin kbsecurity kbsecvulnerability KB2661403

Enviar comentarios

 

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