Çok fazla form anahtarı, dosya veya JSON yük üyelerine sahip ASP.NET isteği, özel bir duruma yol açarak başarısız oluyor

Makale çevirileri Makale çevirileri
Makale numarası: 2661403 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Özet

Microsoft güvenlik güncelleştirmesi MS11-100; form anahtarı, dosya ve JSON üyelerini HTTP isteğinde 1000 olarak sınırlar. Bu değişiklik nedeniyle, ASP.NET uygulamaları bu öğelerden 1000'den fazlasını içeren istekleri reddeder. Bu tür istekler yapan HTTP istemcileri reddedilir ve web tarayıcısında bir hata iletisi görünür. Hata iletisinde genellikle HTTP 500 durum kodu vardır. Bu yeni sınır, her uygulama için ayrı ayrı yapılandırılabilir. Yapılandırma yönergeleri için lütfen "Çözüm" bölümüne bakın.


Belirtiler

Çok fazla form anahtarı, dosya veya JSON yüküne sahip ASP.NET istekleri, sunucudan hata yanıtı alır. Sunucudaki Uygulama günlüğünde ASP.NET'in belirli bir sürümü olan Kaynak'a sahip bir Uyarı girdisi ve Olay Kimliği 1309 bulunur. Olay günlüğü aşağıdaki iletilerden birini içerir: 


İleti 1:
Uygulama bilgileri:
    Uygulama etki alanı: /LM/W3SVC/1/ROOT/<App Domain>
    Güven düzeyi: Orta
    Uygulama Sanal Yolu: <VDIR Path>
    Uygulama Yolu: <App Path>
    Makine adı: <Machine Name>
İşlem bilgileri:
    İşlem Kimliği: 0001
    İşlem adı: w3wp.exe
    Hesap adı: IIS APPPOOL\DefaultAppPool

Özel durum bilgisi:
    Özel durum türü: HttpException
    Özel durum iletisi: URL olarak kodlanmış form verileri geçerli değil.
   şu öğede: System.Web.HttpRequest.FillInFormCollection()
   şu öğede: System.Web.HttpRequest.get_Form()
   şu öğede: System.Web.HttpRequest.get_HasForm()
   şu öğede: System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull)
   şu öğede: System.Web.UI.Page.DeterminePostBackMode()
   şu öğede: System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 


İleti 2:
Uygulama bilgileri:
    Uygulama etki alanı: /LM/W3SVC/1/ROOT/<App Domain>
    Güven düzeyi: Orta
    Uygulama Sanal Yolu: <VDIR Path>
    Uygulama Yolu: <App Path>
    Makine adı: <Machine Name>

İşlem bilgileri:
    İşlem Kimliği: 0001
    İşlem adı: w3wp.exe
    Hesap adı: IIS APPPOOL\DefaultAppPool

Özel durum bilgisi:
    Özel durum türü: InvalidOperationException
    Özel durum iletisi: Nesnenin geçerli durumu nedeniyle işlem geçersiz.
   şu öğede: System.Web.HttpRequest.FillInFilesCollection()
   şu öğede: System.Web.HttpRequest.get_Files()
   şu öğede: FileUpload.Page_Load(Object sender, EventArgs e)
   şu öğede: System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
   şu öğede: System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
   şu öğede: System.Web.UI.Control.OnLoad(EventArgs e)
   şu öğede: System.Web.UI.Control.LoadRecursive()
   şu öğede: System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint

İleti 3:
Uygulama bilgileri:
    Uygulama etki alanı: /LM/W3SVC/1/ROOT/<App Domain>
    Güven düzeyi: Orta
    Uygulama Sanal Yolu: <VDIR Path>
    Uygulama Yolu: <App Path>
    Makine adı: <Machine Name>

İşlem bilgileri:
    İşlem Kimliği: 0001
    İşlem adı: w3wp.exe
    Hesap adı: IIS APPPOOL\DefaultAppPool

Özel durum bilgisi:
    Özel durum türü: InvalidOperationException
    Özel durum iletisi: Nesnenin geçerli durumu nedeniyle işlem geçersiz.
   şu öğede: System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)
   şu öğede: System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)
   şu öğede: System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)
   şu öğede: System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)
   şu öğede: System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject(String input)
   şu öğede: Failing.Page_Load(Object sender, EventArgs e)
   şu öğede: System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
   şu öğede: System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
   şu öğede: System.Web.UI.Control.OnLoad(EventArgs e)
   şu öğede: System.Web.UI.Control.LoadRecursive()
   şu öğede: System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 


IIS günlük dosyası aşağıdakine benzer bir girdi gösterir:
2011-01-01 00:00:00 ::1 POST /machine/default.aspx - 80 - ::1 - 500 0 0 187




Neden

MS11-100 güvenlik bülteninde belirtilen Microsoft güvenlik güncelleştirmesi, ASP.NET'in bir istekte kabul edeceği en fazla form anahtarı, dosya ve JSON üyelerinin varsayılan sayısını 1.000 olarak değiştirir. Bu değişiklik, Microsoft MS11-100 güvenlik bülteninin belgelediği Hizmet Reddi güvenlik açığını gidermek için yapılmıştır.


Çözüm

Form anahtarları veya dosyalara yönelik bu sınıra ulaşan uygulamalar, ASP.NET appSetting aspnet:MaxHttpCollectionKeys öğesini ASP.NET uygulamasının yapılandırma dosyasında aşağıda gösterildiği gibi değiştirebilir. Bu ayar "Belirtiler" bölümündeki hata iletisi 1 ve hata iletisi 2'yi giderir. 
<configuration>
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="1000" />
</appSettings>
</configuration>


Not x86 tabanlı bir sistemde ASP.NET 1.1 kullanıyorsanız, ayar aşağıdaki kayıt defteri anahtarına DWORD değeri eklenerek belirlenir:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys
x64 tabanlı bir sistemde ASP.NET 1.1 kullanıyorsanız, ayar aşağıdaki kayıt defteri anahtarına DWORD değeri eklenerek belirlenir:

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



JSON yüklerine yönelik bu sınıra ulaşan uygulamalar, ASP.NET appSetting aspnet:MaxJsonDeserializerMembers öğesini bir ASP.NET uygulamasının yapılandırma dosyasında aşağıda gösterildiği gibi değiştirebilir. Bu ayar, "Belirtiler" bölümündeki hata iletisi 3'ü hedef alır.
<configuration>
<appSettings>
<add key="aspnet:MaxJsonDeserializerMembers" value="1000" />
</appSettings>
</configuration>



Not Bu değeri varsayılan ayarın üzerine çıkarmak, sunucunuzun MS11-100 güvenlik bülteninde açıklanan Hizmet Reddi güvenlik açığına karşı olan hassasiyetini artırır.


Referanslar

Güvenlik bülteni MS11-100 hakkında daha fazla bilgi için, aşağıdaki TechNet makalesine bakın:
Microsoft Güvenlik Bülteni MS11-100 - Kritik
Daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
2638420 MS11-100: .NET Framework'deki güvenlik açığı ayrıcalık yükselmesine izin verebilir: 29 Aralık 2011

Özellikler

Makale numarası: 2661403 - Last Review: 29 Kasım 2012 Perşembe - Gözden geçirme: 4.0
Bu makaledeki bilginin uygulandığı durum:
  • 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, Ne zaman ne ile kullanilir:
    • 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, Ne zaman ne ile kullanilir:
    • 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, Ne zaman ne ile kullanilir:
    • 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, Ne zaman ne ile kullanilir:
    • 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, Ne zaman ne ile kullanilir:
    • Microsoft Windows Server 2003 Standard Edition
    • Microsoft Windows Server 2003 Enterprise Edition
    • Microsoft Windows Server 2003 Datacenter Edition
    • 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, Ne zaman ne ile kullanilir:
    • Microsoft Windows XP Home Edition
    • Microsoft Windows XP Professional Edition
Anahtar Kelimeler: 
atdownload kbbug kbexpertiseinter kbfix kbsecbulletin kbsecurity kbsecvulnerability KB2661403

Geri Bildirim Ver

 

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