ASP.NET užklausą, kurioje yra daug formos raktus, failus arba JSON srautą nariai nepavyksta išimtį

Taikoma: .NET Framework 3.5 Service Pack 1Windows 7 Service Pack 1Windows 7 Enterprise

Santrauka


"Microsoft" saugos naujinimą MS11-100 apribojimai didžiausią skaičių formos raktus, failus ir JSON nariai 1000 kaip HTTP užklausa. Dėl šio pakeitimo, ASP.NET programos atmesti užklausas, yra daugiau nei 1000 iš šių elementų. HTTP klientams, kurie atlikti šiuos prašymus bus uždrausta, o klaidos pranešimas bus rodomas žiniatinklio naršyklėje. Klaidos pranešimas paprastai turės yra HTTP 500 būsenos kodas. Šis naujas, kuris gali būti konfigūruojamas kiekvienos programos pagrindu. Rasite skyriuje "Sprendimas" konfigūravimo instrukcijos.

Požymiai


ASP.NET užklausos, kurios turi daug formos raktus, failus arba JSON srautą gauna klaidos atsaką iš serverio. Taikomosios programos žurnale serveryje yra įspėjimas įrašo šaltinis , yra konkrečios ASP.NET versijos, ir įvykio ID – 1309. Įvykių žurnale yra viena iš šių pranešimų:
1 pranešimas:
Programos informacija: programos domeno: / LM/W3SVC/1/ROOT/< programos domene > patikimumo lygis: vidutinio programos virtualaus kelias: < VDIR kelias > programos kelias: < programėlių kelias > mašinos pavadinimas: < kompiuterio vardas > proceso informacija: procesas ID: 0001 proceso pavadinimas: w3wp.exe paskyros pavadinimas: IIS APPPOOL\DefaultAppPool išimčių informacijos: išimties tipas: HttpException išimties pranešimas: The kodavimą formos duomenys negalioja. tuo metu (System.Web.HttpRequest.get_Form) (System.Web.HttpRequest.get_HasForm) į System.Web.UI.Page.GetCollectionBasedOnMethod (Boolean dontReturnNull) į ne (System.Web.HttpRequest.FillInFormCollection) (System.Web.UI.Page.DeterminePostBackMode) į System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
2 pranešimas:
Programos informacija: programos domeno: / LM/W3SVC/1/ROOT/< programos domene > patikimumo lygis: vidutinio programos virtualaus kelias: < VDIR kelias > programos kelias: < programėlių kelias > mašinos pavadinimas: < kompiuterio vardas > proceso informacija: procesas ID: 0001Process pavadinimas: w3wp.exe paskyros pavadinimas: IIS APPPOOL\DefaultAppPool išimčių informacijos: išimties tipas: InvalidOperationException išimties pranešimas: operacija neleistina dėl esamą objektą. tuo metu (System.Web.HttpRequest.get_Files) ne FileUpload.Page_Load (objektas siųsti, EventArgs e) į System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, o objektas, objekto t, EventArgs e) į (System.Web.HttpRequest.FillInFilesCollection) System.Web.Util.CalliEventHandlerDelegateProxy.Callback (objektas siųsti, EventArgs e) į System.Web.UI.Control.OnLoad (EventArgs e) į į System.Web.UI.Page.ProcessRequestMain (Boolean (System.Web.UI.Control.LoadRecursive) includeStagesBeforeAsyncPoint
3 pranešimas:
Programos informacija: programos domeno: / LM/W3SVC/1/ROOT/< programos domene > patikimumo lygis: vidutinio programos virtualaus kelias: < VDIR kelias > programos kelias: < programėlių kelias > mašinos pavadinimas: < kompiuterio vardas > proceso informacija: procesas ID: 0001Process pavadinimas: w3wp.exe paskyros pavadinimas: IIS APPPOOL\DefaultAppPool išimčių informacijos: išimties tipas: InvalidOperationException išimties pranešimas: operacija neleistina dėl esamą objektą. ne System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary (Int32 gylis) į System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal (Int32 gylis) į Į System.Web.Script.Serialization.JavaScriptSerializer.Deserialize (JavaScriptSerializer System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize (eilutės įvesties, Int32 depthLimit, JavaScriptSerializer serializer) serializer, eilutės įvesties, tipus, Int32 depthLimit) į System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject (eilutės įvesties) į ne Failing.Page_Load (objektas siųsti, EventArgs e) Ne System.Web.Util.CalliEventHandlerDelegateProxy.Callback (objektas siųsti, EventArgs e) į System.Web.UI.Control.OnLoad (EventArgs e) į System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, o objektas, objekto t, EventArgs e) (System.Web.UI.Control.LoadRecursive) į System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
IIS žurnalo faile rodoma įrašą, panašų į šį:
2011-01-01 00:00:00:: 1 POST /machine/default.aspx - 80 -:: 1 500 0 0 187

Priežastis


"Microsoft" saugos naujinimą, kad saugos biuletenį MS11-100 adresų pakeičia numatytąjį didžiausią skaičių formos raktus, failus ir JSON narių, ASP.NET turi priimti prašymą iki 1000. Šis keitimas buvo atliktas spręsti Denial of Service pažeidžiamumas, kad "Microsoft" saugos biuletenis MS11-100 dokumentus.

Sprendimas


Programų, kurios šią ribą formos raktų ar failus galite modifikuoti ASP.NET appSetting aspnet:MaxHttpCollectionKeys, kaip parodyta toliau ASP.NET programos konfigūracijos failą. Šis parametras skirtas klaidos pranešimas 1 ir klaidos pranešimas 2 iš "Požymiai" skyriuje.
<configuration><appSettings><add key="aspnet:MaxHttpCollectionKeys" value="1000" /></appSettings></configuration>
Pastaba Jei naudojate ASP.NET 1.1 x86 sistemoje, parametras nustatomas iš pridėti reikšmę DWORD, į šį registro raktą:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys
Jei naudojate ASP.NET 1.1 x64 64 sistemoje, parametras nustatomas iš pridėti reikšmę DWORD, į šį registro raktą:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys
Programų, kurios šiuos apribojimus, JSON srautai keisti ASP.NET appSetting aspnet:MaxJsonDeserializerMembers, kaip parodyta toliau ASP.NET programos konfigūracijos failą. Šis parametras skirtas klaidos pranešimą 3 iš "Požymiai" skyriuje.
<configuration><appSettings><add key="aspnet:MaxJsonDeserializerMembers" value="1000" /></appSettings></configuration>
Pastaba Padidinti šią reikšmę virš numatytasis parametras padidina jūsų serverio jautrumas Denial of Service pažeidžiamumas, kuris aptariamas saugos biuletenį MS11-100.

Nuorodos


Daugiau informacijos apie saugos biuletenis MS11-100, ieškokite TechNet straipsnis: Norėdami gauti daugiau informacijos, spustelėkite toliau pateiktą straipsnio numerį ir peržiūrėkite „Microsoft Knowledge Base“ žinių bazės straipsnį:
2638420 MS11-100: .NET Framework pažeidžiamumas gali sudaryti didesnių teisių suteikimas: 2011 m. gruodžio 29