ينطبق على
.NET Framework 3.5 Service Pack 1 Windows 7 Service Pack 1 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 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 Windows Server 2008 for Itanium-Based Systems Windows Server 2008 Datacenter Windows Server 2008 Enterprise Windows Server 2008 Standard Windows Server 2008 Web Edition Windows Vista Service Pack 2 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 Microsoft Windows XP Professional x64 Edition Microsoft Windows XP Service Pack 3 Microsoft Windows XP Home Edition Microsoft Windows XP Professional

الموجز

يقصر التحديث الأمني من Microsoft رقم MS11-100 عدد مفاتيح النماذج والملفات وعناصر حمولات JSON لتصل إلى ١٠٠٠ بحد أقصى في طلب HTTP. وبسبب هذا التغيير، ترفض تطبيقات ASP.NET الطلبات التي تزيد فيها هذه العناصر عن ١٠٠٠. وسيتم رفض عملاء HTTP التي تقوم بإعداد هذه الأنواع من الطلبات، وستظهر رسالة خطأ في مستعرض الويب. وعادةً ما يكون لرسالة الخطأ رمز الحالة HTTP 500. يمكن تكوين هذا الحد الجديد على أساس كل تطبيق. الرجاء مراجعة القسم "الحل" للحصول على إرشادات التكوين.

الأعراض

تتلقى طلبات ASP.NET ـ التي تحتوي على الكثير من مفاتيح النماذج أو الملفات أو حمولة JSON ـ استجابة خطأ من الخادم. ويتضمن سجل التطبيقات الموجود على الخادم إدخال تحذيري يشتمل على مصدر يتمثل في نسخة خاصة من ASP.NET، و"مُعرّف الحدث" رقم ١٣٠٩. أما سجل الأحداث فيحتوي على واحدة من الرسائل التالية:

الرسالة الأولى:

معلومات التطبيق:     مجال التطبيق: /LM/W3SVC/1/ROOT/<App Domain>    مستوى الثقة: متوسط     المسار الظاهري للتطبيق: <VDIR Path>    مسار التطبيق: <App Path>    اسم الجهاز: <Machine Name>معلومات العملية:     مُعرّف العملية: 0001     اسم العملية: w3wp.exe     اسم الحساب: IIS APPPOOL\DefaultAppPool معلومات الاستثناء:    نوع الاستثناء: HttpException     رسالة الاستثناء: بيانات النموذج ذات ترميز عنوان URL غير صالحة.    في System.Web.HttpRequest.FillInFormCollection()   في System.Web.HttpRequest.get_Form()   في System.Web.HttpRequest.get_HasForm()   في System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull)   في System.Web.UI.Page.DeterminePostBackMode()   في System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

الرسالة الثانية:

معلومات التطبيق:     مجال التطبيق: /LM/W3SVC/1/ROOT/<App Domain>     مستوى الثقة: متوسط     المسار الظاهري للتطبيق: <VDIR Path>     مسار التطبيق: <App Path>     اسم الجهاز: <Machine Name>معلومات العملية:     مُعرّف العملية: 0001    اسم العملية: w3wp.exe     اسم الحساب: IIS APPPOOL\DefaultAppPool معلومات الاستثناء:    نوع الاستثناء: InvalidOperationException     رسالة الاستثناء: العملية غير صالحة بسبب الحالة الحالية للكائن.    في System.Web.HttpRequest.FillInFilesCollection()   في System.Web.HttpRequest.get_Files()   في FileUpload.Page_Load(Object sender, EventArgs e) في System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)   في System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)   في System.Web.UI.Control.OnLoad(EventArgs e)   في System.Web.UI.Control.LoadRecursive()   في System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint

الرسالة الثالثة:

معلومات التطبيق:    مجال التطبيق: /LM/W3SVC/1/ROOT/<App Domain>     مستوى الثقة: متوسط     المسار الظاهري للتطبيق: <VDIR Path>     مسار التطبيق: <App Path>    اسم الجهاز: <Machine Name>معلومات العملية:     مُعرّف العملية: 0001    اسم العملية: w3wp.exe     اسم الحساب: IIS APPPOOL\DefaultAppPool معلومات الاستثناء:    نوع الاستثناء: InvalidOperationException     رسالة الاستثناء: العملية غير صالحة بسبب الحالة الحالية للكائن.    في System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)   في System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)   في System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)   في System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)في System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject(String input)في Failing.Page_Load(Object sender, EventArgs e) في System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)   في System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)   في System.Web.UI.Control.OnLoad(EventArgs e)   في System.Web.UI.Control.LoadRecursive()   في System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

يعرض ملف السجل IIS إدخالاً مشابهًا لما يلي:

2011-01-01 00:00:00 ::1 POST /machine/default.aspx - 80 - ::1 - 500 0 0 187

السبب

يعمل التحديث الأمني من Microsoft ـالذي تتناوله نشرة الأمان رقم MS11-100ـ على تغيير الحد الأقصى الافتراضي لعدد مفاتيح النماذج والملفات وعناصر JSON التي سيقبلها تطبيق ASP.NET في أي طلب إلى ١٠٠٠. وقد تم إجراء هذا التغيير للتعامل مع ثغرة قطع الخدمة التي توثقها نشرة الأمان رقم MS11-100 من Microsoft.

الحل

يمكن للتطبيقات التي تصل إلى هذا الحد من حيث عدد مفاتيح النماذج أو الملفات تعديل ASP.NET appSetting aspnet:MaxHttpCollectionKeys، كما هو موضح أدناه في ملف التكوين الخاص بتطبيق ASP.NET. يتعامل هذا الإعداد مع رسالتي الخطأ الأولى والثانية في القسم "الأعراض".

<configuration><appSettings><add key="aspnet:MaxHttpCollectionKeys" value="1000" /></appSettings></configuration>

ملاحظة إذا كنت تستخدم ASP.NET 1.1 على نظام يستند إلى x86، فسيتم ضبط الإعداد عن طريق إضافة قيمة DWORD إلى مفتاح التسجيل التالي:

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

إذا كنت تستخدم ASP.NET 1.1 على نظام يستند إلى x64، فسيتم ضبط الإعداد عن طريق إضافة قيمة DWORD إلى مفتاح التسجيل التالي:

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

يمكن للتطبيقات التي تصل إلى هذا الحد فيما يتعلق بحمولات JSON تعديل ASP.NET appSetting aspnet:MaxJsonDeserializerMembers، كما هو موضح أدناه في ملف التكوين الخاص بتطبيق ASP.NET. يتعامل هذا الإعداد مع رسالة الخطأ الثالثة في القسم "الأعراض".

<configuration><appSettings><add key="aspnet:MaxJsonDeserializerMembers" value="1000" /></appSettings></configuration>

ملاحظة تؤدي زيادة هذه القيمة عن الإعداد الافتراضي إلى زيادة سرعة تأثر الخادم لديك بثغرة "قطع الخدمة" التي تناولناها في نشرة الأمان رقم MS11-100.

مراجع

لمزيد من المعلومات حول نشرة الأمان MS11-100، انظر مقالة TechNet التالية:

نشرة الأمان من Microsoft رقم MS11-100 - Critical لمزيد من المعلومات انقر فوق رقم المقالة التالي لعرضها في "قاعدة معارف Microsoft":

2638420 MS11-100: قد يسمح وجود ثغرة أمنية في .NET Framework برفع الامتيازات: 29 ديسمبر 2011

هل تحتاج إلى مزيد من المساعدة؟

الخروج من الخيارات إضافية؟

استكشف مزايا الاشتراك، واستعرض الدورات التدريبية، وتعرف على كيفية تأمين جهازك، والمزيد.