Požadavek ASP.NET, který obsahuje velké množství klíčů formuláře, souborů nebo členů datové části JSON, selže s výjimkou

Platí pro
.NET Framework 3.5 Service Pack 1 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 Server 2008 for Itanium-Based Systems Windows Server 2008 Datacenter Windows Server 2008 Enterprise Windows Server 2008 Standard Windows Server 2008 Web Edition Windows Vista Service Pack 2 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 Microsoft Windows XP Professional x64 Edition Microsoft Windows XP Service Pack 3 Microsoft Windows XP Home Edition Microsoft Windows XP Professional

Shrnutí

Aktualizace zabezpečení společnosti Microsoft MS11-100 omezuje maximální počet klíčů formuláře, souborů a členů JSON v požadavku HTTP na 1000. Kvůli této změně ASP.NET aplikace odmítají žádosti, které mají více než 1 000 těchto prvků. Klienti HTTP, kteří tyto druhy požadavků provádějí, budou zamítnuti a ve webovém prohlížeči se zobrazí chybová zpráva. Chybová zpráva bývá obvykle opatřena stavovým kódem HTTP 500. Tento nový limit je možné nakonfigurovat pro jednotlivé aplikace. Pokyny ke konfiguraci najdete v části "Řešení".

Příznaky

ASP.NET požadavky, které obsahují velké množství klíčů formuláře, souborů nebo datové části JSON, obdrží ze serveru chybovou odpověď. Protokol aplikace na serveru obsahuje položku upozornění se zdrojem, který je konkrétní verzí ASP.NET, a ID události 1309. Protokol událostí obsahuje jednu z následujících zpráv:

Poselství 1:

Poznámka

Informace o použití:
Doména aplikace: /LM/W3SVC/1/ROOT/<App Domain>
Úroveň důvěryhodnosti: Střední
Virtuální cesta aplikace: <Cesta VDIR>
Cesta k aplikaci: <Cesta k aplikaci>
Název stroje: <Název stroje>
Informace o procesu:
ID procesu: 0001
Název procesu: w3wp.exe
Název účtu: IIS APPPOOL\DefaultAppPool

Informace o výjimce:
Typ výjimky: HttpException
Zpráva o výjimce: Data formuláře kódovaná adresou URL nejsou platná.
v System.Web.HttpRequest.FillInFormCollection()
v System.Web.HttpRequest.get_Form()
v System.Web.HttpRequest.get_HasForm()
v System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull)
v System.Web.UI.Page.DeterminePostBackMode()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Poselství 2:

Poznámka

Informace o použití:
Doména aplikace: /LM/W3SVC/1/ROOT/<App Domain>
Úroveň důvěryhodnosti: Střední
Virtuální cesta aplikace: <Cesta VDIR>
Cesta k aplikaci: <Cesta k aplikaci>
Název stroje: <Název stroje>

Informace o procesu:
ID procesu: 0001
Název procesu: w3wp.exe
Název účtu: IIS APPPOOL\DefaultAppPool

Informace o výjimce:
Typ výjimky: InvalidOperationException
Zpráva o výjimce: Operace není platná z důvodu aktuálního stavu objektu.
v System.Web.HttpRequest.FillInFilesCollection()
v System.Web.HttpRequest.get_Files()
v FileUpload.Page_Load(Object sender, EventArgs e)
at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
v System.Web.UI.Control.OnLoad(EventArgs e)
v System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint

Poselství 3:

Poznámka

Informace o použití:
Doména aplikace: /LM/W3SVC/1/ROOT/<App Domain>
Úroveň důvěryhodnosti: Střední
Virtuální cesta aplikace: <Cesta VDIR>
Cesta k aplikaci: <Cesta k aplikaci>
Název stroje: <Název stroje>

Informace o procesu:
ID procesu: 0001
Název procesu: w3wp.exe
Název účtu: IIS APPPOOL\DefaultAppPool

Informace o výjimce:
Typ výjimky: InvalidOperationException
Zpráva o výjimce: Operace není platná z důvodu aktuálního stavu objektu.
v System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(hloubka Int32)
v System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 hloubka)
at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)
at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)
v System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject(String input)
at Failing.Page_Load(Object sender, EventArgs e)
at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
v System.Web.UI.Control.OnLoad(EventArgs e)
v System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

        
V souboru protokolu služby IIS je položka podobná následující:

2011-01-01 00:00:00 ::1 POST /machine/default.aspx - 80 - ::1 - 500 0 0 187

Příčina

Aktualizace zabezpečení společnosti Microsoft, které se bulletin zabezpečení MS11-100 věnuje, mění výchozí maximální počet klíčů formuláře, souborů a členů JSON, které ASP.NET přijmou v žádosti, na 1 000. Tato změna byla provedena za účelem řešení chyby zabezpečení v podobě odmítnutí služby, kterou dokumentuje bulletin zabezpečení společnosti Microsoft MS11-100.

Řešení

Aplikace, které dosáhnou tohoto limitu pro klíče formuláře nebo soubory, mohou upravit ASP.NET appSetting aspnet:MaxHttpCollectionKeys , jak je znázorněno níže v konfiguračním souboru aplikace ASP.NET. Toto nastavení řeší chybovou zprávu 1 a chybovou zprávu 2 v části Příznaky.

<configuration>
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="1000" />
</appSettings>
</configuration>

        
Poznámka
Pokud používáte ASP.NET 1.1 v systému založeném na platformě x86, je nastavení upraveno přidáním hodnoty DWORD do následujícího klíče registru:

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

Pokud používáte ASP.NET 1.1 v systému založeném na platformě x64, je nastavení upraveno přidáním hodnoty DWORD do následujícího klíče registru:

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

        
        
Aplikace, které dosáhnou tohoto limitu pro datové části JSON, můžou upravit ASP.NET appSetting aspnet:MaxJsonDeserializerMembers, jak je znázorněno níže v konfiguračním souboru aplikace ASP.NET. Toto nastavení řeší chybovou zprávu 3 v části Příznaky.

<configuration>
<appSettings>
<add key="aspnet:MaxJsonDeserializerMembers" value="1000" />
</appSettings>
</configuration>

      

        
Poznámka: Zvýšení této hodnoty nad výchozí nastavení zvyšuje náchylnost serveru k chybě zabezpečení odmítnutí služby, která je popsána v bulletinu zabezpečení MS11-100.

Reference

Další informace o bulletinu zabezpečení MS11-100 naleznete v následujícím článku na TechNetu:

Bulletin zabezpečení společnosti Microsoft MS11-100 - Kritický Další informace naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:

2638420 MS11-100: Chyba zabezpečení v rozhraní .NET Framework umožňuje zvýšení oprávnění: 29. prosince 2011