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