Przejdź do głównej zawartości
Pomoc techniczna
Zaloguj się przy użyciu konta Microsoft
Zaloguj się lub utwórz konto.
Witaj,
Wybierz inne konto.
Masz wiele kont
Wybierz konto, za pomocą którego chcesz się zalogować.

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: 0001
Nazwa 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: 0001
Nazwa 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ą.

Czy te informacje były pomocne?

Jaka jest jakość języka?
Co wpłynęło na Twoje wrażenia?
Jeśli naciśniesz pozycję „Wyślij”, Twoja opinia zostanie użyta do ulepszania produktów i usług firmy Microsoft. Twój administrator IT będzie mógł gromadzić te dane. Oświadczenie o ochronie prywatności.

Dziękujemy za opinię!

×