Požadavek ASP.NET, který obsahuje mnoho klíčů formulářů, souborů nebo členů datové části JSON, se nezdaří s výjimkou

Souhrn

Aktualizace zabezpečení společnosti Microsoft MS11-100 omezuje maximální počet klíčů formulářů, souborů a členů JSON v požadavku HTTP na 1000. Na základě této změny aplikace ASP.NET odmítají požadavky, které mají více než 1000 těchto elementů. Klienti HTTP, kteří zadávají takové požadavky, budou odmítnuti a ve webovém prohlížeči se zobrazí chybová zpráva. Tato chybová zpráva má obvykle stavový kód HTTP 500. Tento nový limit lze konfigurovat pro jednotlivé aplikace. Pokyny ke konfiguraci najdete v části Řešení.


Příznaky

Požadavek ASP.NET, který obsahuje mnoho klíčů formulářů, souborů nebo členů datové části JSON, obdrží od serveru chybovou odpověď. Protokol aplikací na serveru obsahuje položku upozornění se zdrojem, který je určitou verzí rozhraní ASP.NET, a identifikátorem události 1309. Protokol událostí obsahuje jednu z následujících zpráv: 


Zpráva 1:
Informace o aplikaci:
Doména aplikace: /LM/W3SVC/1/ROOT/<Doména aplikace>
Úroveň důvěryhodnosti: Střední
Virtuální cesta aplikace: <Cesta VDIR>
Cesta aplikace: <Cesta aplikace>
Název počítače: <Název počítače>
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á v řetězci 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()
v System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 


Zpráva 2:
Informace o aplikaci:
Doména aplikace: /LM/W3SVC/1/ROOT/<Doména aplikace>
Úroveň důvěryhodnosti: Střední
Virtuální cesta aplikace: <Cesta VDIR>
Cesta aplikace: <Cesta aplikace>
Název počítače: <Název počítače>

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)
v System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
v System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
v System.Web.UI.Control.OnLoad(EventArgs e)
v System.Web.UI.Control.LoadRecursive()
v System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint

Zpráva 3:
Informace o aplikaci:
Doména aplikace: /LM/W3SVC/1/ROOT/<Doména aplikace>
Úroveň důvěryhodnosti: Střední
Virtuální cesta aplikace: <Cesta VDIR>
Cesta aplikace: <Cesta aplikace>
Název počítače: <Název počítače>

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(Int32 depth)
v System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)
v System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)
v System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)
v System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject(String input)
v Failing.Page_Load(Object sender, EventArgs e)
v System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
v System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
v System.Web.UI.Control.OnLoad(EventArgs e)
v System.Web.UI.Control.LoadRecursive()
v System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 


Soubor protokolu IIS obsahuje položku podobnou následující položce:
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, na kterou je zaměřen bulletin MS11-100, mění výchozí maximální počet klíčů formulářů, souborů a členů JSON v požadavku, které rozhraní ASP.NET přijímá, na 1000. Tato změna byla provedena, aby se zabránilo chybě umožňující odepření služby, která je dokumentována v bulletinu zabezpečení společnosti Microsoft MS11-100.


Řešení

Aplikace, které dosáhnou tohoto limitu pro klíče formulářů nebo soubory, mohou upravit nastavení rozhraní ASP.NET appSetting aspnet:MaxHttpCollectionKeys v konfiguračním souboru aplikace ASP.NET, jak je uvedeno dále. Toto nastavení je určeno pro případy chybové zprávy 1 a chybové zprávy 2 z části Příznaky. 
<configuration>
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="1000" />
</appSettings>
</configuration>


Poznámka: Používáte-li rozhraní ASP.NET 1.1 v systému pro platformu x86, nastavení je 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
Používáte-li rozhraní ASP.NET 1.1 v systému pro platformu x64, nastavení je 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, mohou upravit nastavení rozhraní ASP.NET appSetting aspnet:MaxJsonDeserializerMembers v konfiguračním souboru aplikace ASP.NET, jak je uvedeno dále. Toto nastavení je určeno pro případy chybové zprávy 3 z čá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ě umožňující odepření služby, která je probírána v bulletinu zabezpečení MS11-100.


Odkazy

Další informace o bulletinu zabezpečení MS11-100 naleznete v následujícím článku na webu TechNet: Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
2638420 MS11-100: Chyba zabezpečení rozhraní .NET Framework by mohla umožnit zvýšení oprávnění: 29. prosince 2011
Vlastnosti

ID článku: 2661403 - Poslední kontrola: 29. 11. 2012 - Revize: 1

Váš názor