A számos űrlapkulccsal, fájllal vagy hasznos forgalommal rendelkező JSON-taggal rendelkező ASP.NET-kérések kivételhiba miatt meghiúsulnak

Összefoglaló

A Microsoft MS11-100 jelű biztonsági frissítése 1000-re korlátozza a HTTP-kérésekben található űrlapkulcsok, fájlok és JSON-tagok maximális számát. A változás miatt az ASP.NET-alkalmazások elutasítják a több mint 1000 ilyen elemet tartalmazó kéréseket. Az ilyen kéréseket létrehozó HTTP-ügyfeleket elutasítja a rendszer, és hibaüzenet jelenik meg a böngészőben. A hibaüzenet állapotkódja általában HTTP 500. Ez az új korlátozás általában alkalmazásonként külön állítható be. A beállításhoz a cikk megoldást ismertető szakaszában találhat útmutatást.


A jelenség

A számos űrlapkulccsal, fájllal vagy JSON-taggal rendelkező ASP.NET-kérések hibaüzenetet kapnak a kiszolgálótól. A kiszolgálón található alkalmazásnaplóban található egy Figyelmeztetés bejegyzés, amelynek a Forrása az ASP.NET egy adott verziója, az eseményazonosítója pedig 1309. Az eseménynapló a következő üzenetek egyikét tartalmazza:


1. üzenet:
Alkalmazás adatai:
Alkalmazás tartománya: /LM/W3SVC/1/ROOT/<Alkalmazás tartománya>
Megbízhatósági szint: Közepes
Alkalmazás virtuális elérési útja: <Virtuális könyvtár elérési útja>
Alkalmazás elérési útja: <Alkalmazás elérési útja>
Számítógép neve: <Számítógép neve>
Folyamat adatai:
Folyamat azonosítója: 0001
Folyamat neve: w3wp.exe
Fiók neve: IIS APPPOOL\DefaultAppPool

Kivétel adatai:
Kivétel típusa: HttpException
A kivételhez tartozó üzenet: Az URL-kódolású űrlapadatok érvénytelenek.
at System.Web.HttpRequest.FillInFormCollection()
at System.Web.HttpRequest.get_Form()
at System.Web.HttpRequest.get_HasForm()
at System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull)
at System.Web.UI.Page.DeterminePostBackMode()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)


2. üzenet:
Alkalmazás adatai:
Alkalmazás tartománya: /LM/W3SVC/1/ROOT/<Alkalmazás tartománya>
Megbízhatósági szint: Közepes
Alkalmazás virtuális elérési útja: <Virtuális könyvtár elérési útja>
Alkalmazás elérési útja: <Alkalmazás elérési útja>
Számítógép neve: <Számítógép neve>

Folyamat adatai:
Folyamat azonosítója: 0001
Folyamat neve: w3wp.exe
Fiók neve: IIS APPPOOL\DefaultAppPool

Kivétel adatai:
Kivétel típusa: InvalidOperationException
A kivételhez tartozó üzenet: Az objektum jelenlegi állapota miatt a művelet érvénytelen.
at System.Web.HttpRequest.FillInFilesCollection()
at System.Web.HttpRequest.get_Files()
at 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)
at System.Web.UI.Control.OnLoad(EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint

3. üzenet:
Alkalmazás adatai:
Alkalmazás tartománya: /LM/W3SVC/1/ROOT/<Alkalmazás tartománya>
Megbízhatósági szint: Közepes
Alkalmazás virtuális elérési útja: <Virtuális könyvtár elérési útja>
Alkalmazás elérési útja: <Alkalmazás elérési útja>
Számítógép neve: <Számítógép neve>

Folyamat adatai:
Folyamat azonosítója: 0001
Folyamat neve: w3wp.exe
Fiók neve: IIS APPPOOL\DefaultAppPool

Kivétel adatai:
Kivétel típusa: InvalidOperationException
A kivételhez tartozó üzenet: Az objektum jelenlegi állapota miatt a művelet érvénytelen.
at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)
at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)
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)
at 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)
at System.Web.UI.Control.OnLoad(EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)


Az IIS naplófájl a következőhöz hasonló bejegyzést jelenít meg:
2011-01-01 00:00:00 ::1 POST /machine/default.aspx - 80 - ::1 - 500 0 0 187




Oka

A Microsoft MS11-100 jelű biztonsági közleményben ismertetett biztonsági frissítése 1000-re módosítja az egyes kérésekben található űrlapkulcsok, fájlok és JSON-tagok az ASP.NET által elfogadható alapértelmezett maximális számát. A módosítás célja a Microsoft MS11-100 jelű biztonsági közleményében ismertetett szolgáltatásmegtagadási támadások elhárítása.


A megoldás

Az űrlapkulcsok és fájlok határértékét elérő alkalmazások az alábbi ASP.NET alkalmazáskonfigurációs fájlban látható módon módosíthatják az ASP.NET aspnet:MaxHttpCollectionKeys appSetting beállítását. A beállítás a jelenséget ismertető szakaszban található 1. és 2. hibaüzenetre szolgál megoldással.
<configuration>
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="1000" />
</appSettings>
</configuration>


Megjegyzés: Amennyiben ASP.NET 1.1 keretrendszert x86-alapú rendszeren használja, a beállítást úgy módosíthatja, ha egy duplaszó értéket ad hozzá a következő beállításkulcshoz:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys
Amennyiben ASP.NET 1.1 keretrendszert x64-alapú rendszeren használja, a beállítást úgy módosíthatja, ha egy duplaszó értéket ad hozzá a következő beállításkulcshoz:

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



A JSON hasznos forgalomra vonatkozó határértékét elérő alkalmazások az alábbi ASP.NET-alkalmazáskonfigurációfájlban látható módon módosíthatják az ASP.NET aspnet:MaxJsonDeserializerMembers appSetting beállítását. A beállítás a jelenségeket ismertető szakaszban található 3. hibaüzenetre szolgál megoldással.
<configuration>
<appSettings>
<add key="aspnet:MaxJsonDeserializerMembers" value="1000" />
</appSettings>
</configuration>



Megjegyzés: Ha ezt az értéket az alapérték fölé növeli, azzal jobban kiteszi a kiszolgálót az MS11-100 jelű biztonsági közleményben ismertetett szolgáltatásmegtagadási támadásoknak.


Hivatkozások

Az MS11-100 jelű biztonsági közleményről a következő TechNet-cikkben olvashat bővebben: További információt a Microsoft Tudásbázis következő cikkében talál:
2638420 MS11-100: A .NET-keretrendszer biztonsági rése jogosultság-kiterjesztést tehet lehetővé: 2011. december 29.
Tulajdonságok

Cikkazonosító: 2661403 - Utolsó ellenőrzés: 2012. nov. 29. - Verziószám: 1

Visszajelzés