Een ASP.NET-verzoek met veel formuliervelden, bestanden of JSON-nettoladingsleden mislukt met een uitzonderingsfout

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 2661403 - Bekijk de producten waarop dit artikel van toepassing is.
Alles uitklappen | Alles samenvouwen

Samenvatting

Met Microsoft-beveiligingsupdate MS11-100 wordt het maximumaantal formuliervelden, bestanden en JSON-leden in een HTTP-verzoek beperkt tot 1000. Door deze wijziging worden verzoeken met meer dan 1000 van dergelijke elementen door ASP.NET-toepassingen geweigerd. HTTP-clients waarop dit soort verzoeken worden gedaan, worden geweigerd, en er wordt een foutbericht in de webbrowser weergegeven. Het foutbericht heeft meestal de statuscode HTTP 500. Deze nieuwe limiet kan per toepassing worden ingesteld. Zie de sectie Oplossing voor configuratie-instructies.


Symptomen

De server reageert met een foutbericht op ASP.NET-verzoeken met veel formuliervelden, bestanden of JSON-nettoladingen. Het toepassingslogboek op de server bevat een waarschuwing met als Bron een specifieke ASP.NET-versie, en gebeurtenis-id 1309. Het gebeurtenislogboek bevat een van de volgende berichten:


Bericht 1:
Toepassingsinformatie:
Toepassingsdomein: /LM/W3SVC/1/ROOT/<Toepassingsdomein>
Vertrouwensniveau: Normaal
Virtueel pad naar toepassing: <Virtueel toepassingspad>
Pad naar toepassing: <Toepassingspad>
Machinenaam: <Machinenaam>
Procesinformatie:
Proces-id: 0001
Procesnaam: w3wp.exe
Accountnaam: IIS APPPOOL\DefaultAppPool

Uitzonderingsinformatie:
Uitzonderingstype: HttpException
Uitzonderingsbericht: De formuliergegevens met URL-codering zijn ongeldig.
op System.Web.HttpRequest.FillInFormCollection()
op System.Web.HttpRequest.get_Form()
op System.Web.HttpRequest.get_HasForm()
op System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull)
op System.Web.UI.Page.DeterminePostBackMode()
op System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)


Bericht 2:
Toepassingsinformatie:
Toepassingsdomein: /LM/W3SVC/1/ROOT/<Toepassingsdomein>
Vertrouwensniveau: Normaal
Virtueel pad naar toepassing: <Virtueel toepassingspad>
Pad naar toepassing: <Toepassingspad>
Machinenaam: <Machinenaam>

Procesinformatie:
Proces-id: 0001
Procesnaam: w3wp.exe
Accountnaam: IIS APPPOOL\DefaultAppPool

Uitzonderingsinformatie:
Uitzonderingstype: InvalidOperationException
Uitzonderingsbericht: De bewerking is ongeldig vanwege de huidige staat van het object.
op System.Web.HttpRequest.FillInFilesCollection()
op System.Web.HttpRequest.get_Files()
op FileUpload.Page_Load(Object sender, EventArgs e)
op System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
op System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
op System.Web.UI.Control.OnLoad(EventArgs e)
op System.Web.UI.Control.LoadRecursive()
op System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint

Bericht 3:
Toepassingsinformatie:
Toepassingsdomein: /LM/W3SVC/1/ROOT/<Toepassingsdomein>
Vertrouwensniveau: Normaal
Virtueel pad naar toepassing: <Virtueel toepassingspad>
Pad naar toepassing: <Toepassingspad>
Machinenaam: <Machinenaam>

Procesinformatie:
Proces-id: 0001
Procesnaam: w3wp.exe
Accountnaam: IIS APPPOOL\DefaultAppPool

Uitzonderingsinformatie:
Uitzonderingstype: InvalidOperationException
Uitzonderingsbericht: De bewerking is ongeldig vanwege de huidige staat van het object.
op System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)
op System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)
op System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)
op System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)
op System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject(String input)
op Failing.Page_Load(Object sender, EventArgs e)
op System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
op System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
op System.Web.UI.Control.OnLoad(EventArgs e)
op System.Web.UI.Control.LoadRecursive()
op System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)


Het IIS-logboekbestand bevat een vermelding die lijkt op de volgende:
2011-01-01 00:00:00 ::1 POST /machine/default.aspx - 80 - ::1 - 500 0 0 187




Oorzaak

Met de Microsoft-beveiligingsupdate van beveiligingsbulletin MS11-100 wordt het standaard maximumaantal formuliervelden, bestanden en JSON-leden dat door ASP.NET in een verzoek wordt geaccepteerd, gewijzigd in 1000. Deze wijziging is aangebracht om het Denial-of-Service-beveiligingsprobleem op te lossen dat in Microsoft-beveiligingsbulletin MS11-100 is beschreven.


Oplossing

Voor toepassingen waarin het maximumaantal formuliervelden of bestanden wordt bereikt, kan de ASP.NET-appSetting aspnet:MaxHttpCollectionKeys worden gewijzigd, zoals hieronder wordt getoond in een configuratiebestand van een ASP.NET-toepassing. Met deze instelling worden foutbericht 1 en foutbericht 2 uit de sectie Symptomen opgelost.
<configuration>
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="1000" />
</appSettings>
</configuration>


Opmerking Als u ASP.NET 1.1 gebruikt op een x86-systeem, past u de instelling aan door een DWORD-waarde aan de volgende registersleutel toe te voegen:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys
Als u ASP.NET 1.1 gebruikt op een x64-systeem, past u de instelling aan door een DWORD-waarde aan de volgende registersleutel toe te voegen:

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



Voor toepassingen waarin het maximumaantal JSON-nettoladingen wordt bereikt, kan de ASP.NET-appSetting aspnet:MaxJsonDeserializerMembers worden gewijzigd, zoals hieronder wordt getoond in een configuratiebestand van een ASP.NET-toepassing. Met deze instelling wordt foutbericht 3 uit de sectie Symptomen opgelost.
<configuration>
<appSettings>
<add key="aspnet:MaxJsonDeserializerMembers" value="1000" />
</appSettings>
</configuration>



Opmerking Als u deze waarde boven de standaardinstelling instelt, wordt uw server kwetsbaarder voor het Denial of Service-beveiligingsprobleem dat is beschreven in beveiligingsbulletin MS11-100.


Referenties

Raadpleeg het volgende TechNet-artikel voor meer informatie over beveiligingsbulletin MS11-100:
Microsoft-beveiligingsbulletin MS11-100 - Kritiek
Klik voor meer informatie op het volgende artikelnummer in de Microsoft Knowledge Base:
2638420 MS11-100: Beveiligingsprobleem in .NET Framework kan leiden tot uitbreiding van bevoegdheden: 29.12.11

Eigenschappen

Artikel ID: 2661403 - Laatste beoordeling: donderdag 29 november 2012 - Wijziging: 4.0
De informatie in dit artikel is van toepassing op:
  • 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 op de volgende platformen
    • 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 op de volgende platformen
    • 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 op de volgende platformen
    • 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 op de volgende platformen
    • 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 op de volgende platformen
    • 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 op de volgende platformen
    • Microsoft Windows XP Home Edition
    • Microsoft Windows XP Professional
Trefwoorden: 
atdownload kbbug kbexpertiseinter kbfix kbsecbulletin kbsecurity kbsecvulnerability KB2661403

Geef ons feedback

 

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