™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