Paljon lomakeavaimia, tiedostoja tai JSON-hyötykuormajäseniä sisältävä ASP.NET-pyyntö epäonnistuu ja antaa poikkeuksen

Artikkeleiden käännökset Artikkeleiden käännökset
Artikkelin tunnus: 2661403 - Näytä tuotteet, joita tämä artikkeli koskee.
Laajenna kaikki | Kutista kaikki

Yhteenveto

Microsoft-suojauspäivitys MS11-100 rajoittaa HTTP-pyynnön lomakeavainten, tiedostojen ja JSON-hyötykuormajäsenten enimmäismääräksi 1 000. Tämän muutoksen vuoksi ASP.NET-sovellukset hylkäävät pyynnöt, joissa on yli 1 000 tällaista elementtiä. Tällaisia pyyntöjä tekevät HTTP-asiakkaat estetään, ja selaimeen tulee näkyviin virhesanoma. Virhesanomassa on yleensä HTTP 500 -tilakoodi. Tämän uuden rajoituksen voi määrittää sovelluskohtaisesti. Määritysohjeet ovat ongelmanratkaisuosiossa.


Oire

Paljon lomakeavaimia, tiedostoja tai JSON-hyötykuormaa sisältävät ASP.NET-pyynnöt saa virhevastauksen palvelimesta. Palvelimessa olevassa sovelluslokissa on varoitusmerkintä Lähde-määrityksellä, joka on tietty ASP.NET-versio, sekä tapahtumatunnus 1309. Tapahtumaloki sisältää jonkin seuraavista sanomista:


Sanoma 1:
Sovelluksen tiedot:
Sovelluksen toimialue: /LM/W3SVC/1/ROOT/<Sovelluksen toimialue>
Luottamustaso: Normaali
Sovelluksen näennäispolku: <VDIR-polku>
Sovelluksen polku: <Sovelluksen polku>
Koneen nimi: <Koneen nimi>
Prosessin tiedot:
Prosessin tunnus: 0001
Prosessin nimi: w3wp.exe
Tilin nimi: IIS APPPOOL\DefaultAppPool

Poikkeuksen tiedot:
Poikkeuksen laji: HttpException
Poikkeuksen sanoma: URL-koodatut lomaketiedot ovat virheellisiä.
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)


Sanoma 2:
Sovelluksen tiedot:
Sovelluksen toimialue: /LM/W3SVC/1/ROOT/<Sovelluksen toimialue>
Luottamustaso: Normaali
Sovelluksen näennäispolku: <VDIR-polku>
Sovelluksen polku: <Sovelluksen polku>
Koneen nimi: <Koneen nimi>

Prosessin tiedot:
Prosessin tunnus: 0001
Prosessin nimi: w3wp.exe
Tilin nimi: IIS APPPOOL\DefaultAppPool

Poikkeuksen tiedot:
Poikkeuksen laji: InvalidOperationException
Poikkeuksen sanoma: Toiminto ei ole käytettävissä objektin nykyisen tilan vuoksi.
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

Sanoma 3:
Sovelluksen tiedot:
Sovelluksen toimialue: /LM/W3SVC/1/ROOT/<Sovelluksen toimialue>
Luottamustaso: Normaali
Sovelluksen näennäispolku: <VDIR-polku>
Sovelluksen polku: <Sovelluksen polku>
Koneen nimi: <Koneen nimi>

Prosessin tiedot:
Prosessin tunnus: 0001
Prosessin nimi: w3wp.exe
Tilin nimi: IIS APPPOOL\DefaultAppPool

Poikkeuksen tiedot:
Poikkeuksen laji: InvalidOperationException
Poikkeuksen sanoma: Toiminto ei ole käytettävissä objektin nykyisen tilan vuoksi.
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)


IIS-lokitiedostossa näkyy seuraavankaltainen merkintä:
2011-01-01 00:00:00 ::1 POST /machine/default.aspx - 80 - ::1 - 500 0 0 187




Syy

Microsoft-suojauspäivitys, jota suojaustiedote MS11-100 koskee, muuttaa ASP.NETin pyynnössä hyväksymien lomakeavainten, tiedostojen ja JSON-jäsenten enimmäismääräksi 1 000. Tämä muutos on tehty Microsoft-suojaustiedotteessa MS11-100 dokumentoidun palvelunestoheikkouden korjaamiseksi.


Ratkaisu

Tämän lomakeavain- tai tiedostorajoituksen saavuttavat sovellukset voivat muokata ASP.NET-sovellusasetusta aspnet:MaxHttpCollectionKeys, mikä on kuvattu alla olevassa ASP.NET-sovelluksen kokoonpanotiedostossa. Tämä asetus korjaa tämän artikkelin oireista kertovassa kohdassa kuvatut virhesanomat 1 ja 2.
<configuration>
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="1000" />
</appSettings>
</configuration>


Huomautus Jos ASP.NET 1.1 on käytössä x86-järjestelmässä, asetusta säädetään lisäämällä DWORD-arvo seuraavaan rekisteriavaimeen:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys
Jos ASP.NET 1.1 on käytössä x64-järjestelmässä, asetusta säädetään lisäämällä DWORD-arvo seuraavaan rekisteriavaimeen:

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



Tämän JSON-hyötykuormarajoituksen saavuttavat sovellukset voivat muokata ASP.NET-sovellusasetusta aspnet:MaxJsonDeserializerMembers, mikä on kuvattu alla olevassa ASP.NET-sovelluksen kokoonpanotiedostossa. Tämä asetus korjaa tämän artikkelin oireista kertovassa kohdassa kuvatun virhesanoman 3.
<configuration>
<appSettings>
<add key="aspnet:MaxJsonDeserializerMembers" value="1000" />
</appSettings>
</configuration>



Huomautus Jos tämä arvo on oletusasetusta suurempi, palvelin on tavallista alttiimpi suojaustiedotteessa MS11-100 kuvatulle palvelunestoheikkoudelle.


Suositukset

Lisätietoja suojaustiedotteesta MS11-100 on seuraavassa TechNet-artikkelissa:
Microsoft-suojaustiedote MS11-100 ? kriittinen
Saat lisätietoja napsauttamalla seuraavaa artikkelin numeroa, jolloin pääset lukemaan artikkelin Microsoft Knowledge Base -tietokannassa:
2638420 MS11-100: .NET Framework -ytimen heikkous saattaa mahdollistaa käyttöoikeuksien laajentamisen: 29.12.2011
Huomautus Tämä on niin sanottu nopeasti julkaistava (?fast publish?) artikkeli, joka on laadittu suoraan Microsoftin tukiorganisaatiossa. Tässä olevat tiedot toimitetaan sellaisenaan vastauksena esiin tulleisiin ongelmiin. Koska aineisto on tuotu saataville nopeasti, se saattaa sisältää painovirheitä ja tietoja saatetaan muokata milloin tahansa ilman erillistä ilmoitusta. Lue muut huomioon otettavat seikat käyttöehdoista.

Ominaisuudet

Artikkelin tunnus: 2661403 - Viimeisin tarkistus: 29. marraskuuta 2012 - Versio: 1.0
Artikkelin tiedot koskevat seuraavia tuotteita:
  • Microsoft .NET Framework 4.0
  • Microsoft .NET Framework 3.5 Service Pack 1
  • Microsoft .NET Framework 3.5
  • Microsoft .NET Framework 2.0 Service Pack 2
  • Microsoft .NET Framework 2.0 Service Pack 1 (x86)
  • Microsoft .NET Framework 2.0
  • Microsoft .NET Framework 1.1 Service Pack 1
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0 Service Pack 3
  • Microsoft .NET Framework 1.0
  • Windows 7 Service Pack 1 seuraavilla käyttöjärjestelmillä
    • 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 seuraavilla käyttöjärjestelmillä
    • 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 seuraavilla käyttöjärjestelmillä
    • Windows Server 2008 for Itanium-Based Systems
    • Windows Server 2008 Datacenter
    • Windows Server 2008 Enterprise
    • Windows Server 2008 Standard
    • Windows Web Server 2008
  • Windows Vista Service Pack 2 seuraavilla käyttöjärjestelmillä
    • 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 seuraavilla käyttöjärjestelmillä
    • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
    • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
    • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
    • Microsoft Windows Server 2003, Web Edition
    • Microsoft Windows Server 2003, Datacenter x64 Edition
    • Microsoft Windows Server 2003, Enterprise x64 Edition
    • Microsoft Windows Server 2003, Standard x64 Edition
    • Microsoft Windows XP Professional x64 Edition
    • Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems
    • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
  • Microsoft Windows XP Service Pack 3 seuraavilla käyttöjärjestelmillä
    • Microsoft Windows XP Home Edition
    • Microsoft Windows XP Professional
Hakusanat: 
atdownload kbbug kbexpertiseinter kbfix kbsecbulletin kbsecurity kbsecvulnerability KB2661403

Anna palautetta

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com