En ASP.NET-begäran som har massor av formuläret nycklar, filer eller JSON-nyttolasten medlemmar misslyckas med ett undantag

Gäller för: .NET Framework 3.5 Service Pack 1Windows 7 Service Pack 1Windows 7 Enterprise

Sammanfattning


Microsofts säkerhetsuppdatering MS11-100 gränser maximalt antal formulär nycklar, filer och JSON-medlemmar till 1000 i en HTTP-begäran. ASP.NET-program avvisa begäranden som har mer än 1000 av dessa element på grund av denna ändring. HTTP-klienter som gör dessa typer av begäranden kommer att nekas och ett felmeddelande visas i webbläsaren. Felmeddelandet har vanligtvis en HTTP 500-statuskod. Denna nya gräns kan konfigureras på basis per program. Se avsnittet ”lösning” för instruktioner för konfigurering.

Symptom


ASP.NET-begäranden som har massor av formuläret nycklar, filer eller JSON-nyttolasten får ett felsvar från servern. Programloggen på servern har en varning transaktion med en källa som en viss version av ASP.NET och händelse-ID 1309. Händelseloggen innehåller något av följande meddelanden:
Meddelande 1:
Programinformation: programdomän: / LM/W3SVC/1/ROOT/< programdomänen > förtroendenivå: medel programmets virtuella sökväg: < VDIR sökväg > sökvägen till programmet: < App-sökväg > datornamn: < datornamn > processinformation: Process-ID: 0001 Processnamn: w3wp.exe kontonamn: IIS APPPOOL\DefaultAppPool Undantagsinformation: undantagstyp: HttpException Undantagsmeddelande: det URL-kodade formulärdata är inte giltig. vid System.Web.HttpRequest.FillInFormCollection () i System.Web.HttpRequest.get_Form () i (System.Web.HttpRequest.get_HasForm) vid System.Web.UI.Page.GetCollectionBasedOnMethod (booleska dontReturnNull) på (System.Web.UI.Page.DeterminePostBackMode) vid System.Web.UI.Page.ProcessRequestMain (booleska includeStagesBeforeAsyncPoint, booleska includeStagesAfterAsyncPoint)
Meddelande 2:
Programinformation: programdomän: / LM/W3SVC/1/ROOT/< programdomänen > förtroendenivå: medel programmets virtuella sökväg: < VDIR sökväg > sökvägen till programmet: < App-sökväg > datornamn: < datornamn > processinformation: Process-ID: 0001Process namn: w3wp.exe kontonamn: IIS APPPOOL\DefaultAppPool Undantagsinformation: undantagstyp: InvalidOperationException Undantagsmeddelande: åtgärden är inte giltig på grund av objektets aktuella tillstånd. vid System.Web.HttpRequest.FillInFilesCollection () i (System.Web.HttpRequest.get_Files) vid FileUpload.Page_Load (objekt avsändare, Händelseargument kan e) vid System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, o objekt, objekt t, Händelseargument kan e) vid System.Web.Util.CalliEventHandlerDelegateProxy.Callback (objekt avsändare, Händelseargument kan e) vid System.Web.UI.Control.OnLoad (Händelseargument kan e) vid System.Web.UI.Control.LoadRecursive () vid System.Web.UI.Page.ProcessRequestMain (booleska includeStagesBeforeAsyncPoint
Meddelande 3:
Information: programmet programdomän: / LM/W3SVC/1/ROOT/< programdomänen > förtroendenivå: medel virtuella sökvägen till programmet: < VDIR sökväg > sökvägen till programmet: < App-sökväg > datornamn: < datornamn > processinformation: Process-ID: 0001Process namn: w3wp.exe kontonamn: IIS APPPOOL\DefaultAppPool Undantagsinformation: undantagstyp: InvalidOperationException Undantagsmeddelande: åtgärden är inte giltig på grund av objektets aktuella tillstånd. vid System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary (Int32 djup) vid System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal (Int32 djup) vid System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize (stränginmatning, Int32 depthLimit, JavaScriptSerializer serialiseraren) vid System.Web.Script.Serialization.JavaScriptSerializer.Deserialize (JavaScriptSerializer serialisering, stränginmatning, typ typ, Int32 depthLimit) vid System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject (String indata) vid Failing.Page_Load (objekt avsändare, Händelseargument kan e) vid System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, o objekt, objekt t, Händelseargument kan e) vid System.Web.Util.CalliEventHandlerDelegateProxy.Callback (objekt avsändare, Händelseargument kan e) vid System.Web.UI.Control.OnLoad (Händelseargument kan e) vid (System.Web.UI.Control.LoadRecursive) vid System.Web.UI.Page.ProcessRequestMain (booleska includeStagesBeforeAsyncPoint, booleska includeStagesAfterAsyncPoint)
IIS-loggen visar en post av följande slag:
2011-01-01 00:00:00:: 1 POST /machine/default.aspx - 80 -:: 1 500 0 0 187

Orsak


Microsoft security update att security bulletin MS11-100 adresser ändras standardantalet formulär nycklar, filer och JSON-medlemmar som accepterar ASP.NET i en begäran till 1 000. Den här ändringen gjordes till DOS-säkerhetsproblem som Microsoft security säkerhetsbulletinen MS11-100 dokument.

Lösning


Program som når denna gräns för formuläret nycklar eller filer kan ändra ASP.NET appSetting aspnet:MaxHttpCollectionKeys, som visas nedan i konfigurationsfilen för ett ASP.NET-program. Den här inställningen åtgärdar fel meddelande 1 och fel meddelande 2 från ”symptom” avsnitt.
<configuration><appSettings><add key="aspnet:MaxHttpCollectionKeys" value="1000" /></appSettings></configuration>
OBS! Om du använder ASP.NET 1.1 på en dator med x86 justeras genom att lägga till ett DWORD-värde i följande registernyckel:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys
Om du använder ASP.NET 1.1 på en dator med x64 justeras genom att lägga till ett DWORD-värde i följande registernyckel:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys
Program som nått den här gränsen för JSON-nyttolaster kan ändra ASP.NET appSetting aspnet:MaxJsonDeserializerMembers, som visas nedan i konfigurationsfilen för ett ASP.NET-program. Den här inställningen åtgärdar fel meddelande 3 från ”symptom” avsnitt.
<configuration><appSettings><add key="aspnet:MaxJsonDeserializerMembers" value="1000" /></appSettings></configuration>
OBS! Om du ökar värdet för ovanstående standard inställningen ökar mottaglighet för servern för DOS-säkerhetsproblem som beskrivs i säkerhetsbulletin MS11-100.

Referenser


Mer information om säkerhetsbulletinen MS11-100 finns i följande TechNet-artikel: Om du vill veta mer klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:
2638420 MS11-100: Säkerhetsproblem i.NET Framework möjliggör behörighetshöjning: den 29 December 2011