Applies To.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 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 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

Streszczenie

Aktualizacja zabezpieczeń firmy Microsoft MS11-100 ogranicza maksymalną liczbę kluczy formularzy, plików i elementów JSON w żądaniu HTTP do 1000. Z powodu tej zmiany aplikacje ASP.NET odrzucają żądania zawierające więcej niż 1000 tych elementów. Tego rodzaju żądania wysyłane przez klienta HTTP zostają odrzucone, a w przeglądarce sieci Web pojawia się komunikat o błędzie. Komunikat o błędzie ma zwykle kod stanu HTTP 500. Ten nowy limit można skonfigurować dla poszczególnych aplikacji. Instrukcje dotyczące konfiguracji zawarto w sekcji „Rozwiązanie”.

Symptomy

Na żądania ASP.NET zawierające wiele kluczy formularzy, plików lub elementów JSON serwer odpowiada komunikatem o błędzie. W dzienniku aplikacji na serwerze znajduje się wpis ostrzeżenia, w którym jako Źródło wskazana jest konkretna wersja programu ASP.NET, a zdarzenie ma identyfikator 1309. Dziennik zdarzeń zawiera jeden z następujących komunikatów:

Komunikat 1:

Informacje o aplikacji: Domena aplikacji: /LM/W3SVC/1/ROOT/<domena_aplikacji>Poziom zaufania: Średni Ścieżka wirtualna aplikacji: <ścieżka_VDIR>Ścieżka aplikacji: <ścieżka_aplikacji>Nazwa komputera: <nazwa_komputera>Informacje o procesie: Identyfikator procesu: 0001 Nazwa procesu: w3wp.exe Nazwa konta: IIS APPPOOL\DefaultAppPool Informacje o wyjątku: Typ wyjątku: HttpException Komunikat o wyjątku: Dane formularza kodowane za pomocą adresu URL są nieprawidłowe. w System.Web.HttpRequest.FillInFormCollection()w System.Web.HttpRequest.get_Form()w System.Web.HttpRequest.get_HasForm()w System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull)w System.Web.UI.Page.DeterminePostBackMode()w System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Komunikat 2:

Informacje o aplikacji: Domena aplikacji: /LM/W3SVC/1/ROOT/<domena_aplikacji> Poziom zaufania: Średni Ścieżka wirtualna aplikacji: <ścieżka_VDIR> Ścieżka aplikacji: <ścieżka_aplikacji> Nazwa komputera: <nazwa_komputera>Informacje o procesie: Identyfikator procesu: 0001Nazwa procesu: w3wp.exe Nazwa konta: IIS APPPOOL\DefaultAppPool Informacje o wyjątku: Typ wyjątku: InvalidOperationException Komunikat o wyjątku: Ze względu na bieżący stan obiektu operacja jest nieprawidłowa. w System.Web.HttpRequest.FillInFilesCollection()w System.Web.HttpRequest.get_Files()w FileUpload.Page_Load(Object sender, EventArgs e) w System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)w System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)w System.Web.UI.Control.OnLoad(EventArgs e)w System.Web.UI.Control.LoadRecursive()w System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint

Komunikat 3:

Informacje o aplikacji:Domena aplikacji: /LM/W3SVC/1/ROOT/<domena_aplikacji> Poziom zaufania: Średni Ścieżka wirtualna aplikacji: <ścieżka_VDIR> Ścieżka aplikacji: <ścieżka_aplikacji>Nazwa komputera: <nazwa_komputera>Informacje o procesie: Identyfikator procesu: 0001Nazwa procesu: w3wp.exe Nazwa konta: IIS APPPOOL\DefaultAppPool Informacje o wyjątku: Typ wyjątku: InvalidOperationException Komunikat o wyjątku: Ze względu na bieżący stan obiektu operacja jest nieprawidłowa. w System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)w System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)w System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)w System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)w System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject(String input)w Failing.Page_Load(Object sender, EventArgs e) w System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)w System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)w System.Web.UI.Control.OnLoad(EventArgs e)w System.Web.UI.Control.LoadRecursive()w System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

W dzienniku programu IIS znajduje się wpis podobny do następującego:

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

Przyczyna

Aktualizacja zabezpieczeń firmy Microsoft opisana w biuletynie zabezpieczeń MS11-100 zmienia domyślną maksymalną liczbę kluczy formularzy, plików i elementów JSON akceptowaną w żądaniu przez program ASP.NET na 1000. Tę zmianę wprowadzono w celu wyeliminowania luki w zabezpieczeniach umożliwiającej atak typu „odmowa usługi” udokumentowanej w biuletynie zabezpieczeń firmy Microsoft MS11-100.

Rozwiązanie

W przypadku aplikacji, które osiągają ten limit dla kluczy formularzy lub plików, można zmodyfikować pozycję programu ASP.NET appSetting aspnet:MaxHttpCollectionKeys, jak pokazano poniżej, w pliku konfiguracji aplikacji ASP.NET. To ustawienie rozwiązuje problem z komunikatami o błędach 1 i 2 z sekcji „Symptomy”.

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

Uwaga W razie używania wersji ASP.NET 1.1 w systemie opartym na procesorach x86 to ustawienie dopasowuje się, dodając wartość DWORD do następującego klucza rejestru:

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

W razie używania wersji ASP.NET 1.1 w systemie opartym na procesorach x64 to ustawienie dopasowuje się, dodając wartość DWORD do następującego klucza rejestru:

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

W przypadku aplikacji, które osiągają ten limit dla ładunków JSON, można zmodyfikować pozycję programu ASP.NET appSetting aspnet:MaxJsonDeserializerMembers, jak pokazano poniżej, w pliku konfiguracji aplikacji ASP.NET. To ustawienie rozwiązuje problem z komunikatem o błędzie 3 z sekcji „Symptomy”.

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

Uwaga Zwiększenie powyższej wartości ponad ustawienie domyślne zwiększa podatność serwera na zagrożenie atakiem typu „odmowa usługi” z wykorzystaniem luki w zabezpieczeniach omówionej w biuletynie zabezpieczeń MS11-100.

Materiały referencyjne

Aby uzyskać więcej informacji o biuletynie zabezpieczeń MS11-100, zobacz następujący artykuł w witrynie TechNet:

Biuletyn zabezpieczeń MS11-100 firmy Microsoft — krytyczne Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

2638420 MS11-100: Luka w zabezpieczeniach programu .NET Framework umożliwia podniesienie uprawnień: 29 grudnia 2011

Potrzebujesz dalszej pomocy?

Chcesz uzyskać więcej opcji?

Poznaj korzyści z subskrypcji, przeglądaj kursy szkoleniowe, dowiedz się, jak zabezpieczyć urządzenie i nie tylko.

Społeczności pomagają zadawać i odpowiadać na pytania, przekazywać opinie i słuchać ekspertów z bogatą wiedzą.