חל על
.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

תקציר

עדכון אבטחה MS11-100 של Microsoft מגביל את המספר המרבי של מפתחות צורה, קבצים וחברי JSON ל- 1000 בבקשת HTTP. עקב שינוי זה, יישומי ASP.NET דוחים בקשות שיש בהן יותר מ- 1000 מרכיבים אלה. לקוחות HTTP שמבצעים בקשות כאלה יידחו, והודעת שגיאה תופיע בדפדפן האינטרנט. הודעה השגיאה תכלול בדרך כלל קוד מצב HTTP 500. ניתן לקבוע את התצורה של מגבלה זו לפי היישום. עיין בסעיף "פתרון" לקבלת הוראות לקביעת תצורה.

מאפייני הבעיה

בקשות ASP.NET עם הרבה מפתחות צורה, קבצים או מטעני JSON מקבלים תגובת שגיאה מהשרת. ליומן הרישום 'יישום' בשרת יש ערך 'אזהרה' עם מקור שהוא גירסה ספציפית של ASP.NET, ומזהה אירוע של 1309. יומן האירועים מכיל אחת מההודעות הבאות:

הודעה 1:

פרטי יישום: תחום יישום: /LM/W3SVC/1/ROOT/<App Domain>רמת אמון: בינונית נתיב וירטואלי של היישום: <VDIR Path>נתיב יישום: <App Path>שם מחשב: <שם מחשב>פרטי תהליך: מזהה תהליך: 0001 שם תהליך: w3wp.exe שם חשבון: IIS APPPOOL\DefaultAppPool פרטי חריגה: סוג חריגה: HttpException הודעה על חריגה: נתוני צורה בקידוד URL אינם חוקיים. 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)

הודעה 2:

פרטי יישום: תחום יישום: /LM/W3SVC/1/ROOT/<App Domain> רמת אמון: בינונית נתיב וירטואלי של היישום: <VDIR Path> נתיב יישום: <App Path> שם מחשב: <שם מחשב>פרטי תהליך: מזהה תהליך: 0001שם תהליך: w3wp.exe שם חשבון: IIS APPPOOL\DefaultAppPool פרטי חריגה: סוג חריגה: InvalidOperationException הודעה על חריגה: הפעולה אינה חוקית עקב המצב הנוכחי של האובייקט. 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

הודעה 3:

פרטי יישום:תחום יישום: /LM/W3SVC/1/ROOT/<App Domain> רמת אמון: בינונית נתיב וירטואלי של היישום: <VDIR Path> נתיב יישום: <App Path>שם מחשב: <שם מחשב>פרטי תהליך: מזהה תהליך: 0001שם תהליך: w3wp.exe שם חשבון: IIS APPPOOL\DefaultAppPool פרטי חריגה: סוג חריגה: InvalidOperationException הודעה על חריגה: הפעולה אינה חוקית עקב המצב הנוכחי של האובייקט. 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 מציג ערך שדומה לערך הבא:

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

סיבה

עדכון האבטחה של Microsoft שעלון האבטחה MS11-100 עוסק בו משנה את מספר המקסימום שנקבע כברירת מחדל של מפתחות צורה, קבצים וחברי JSON ש- ASP.NET יקבל בבקשה ל- 1,000. שינוי זה בוצע כדי לטפל בפגיעות של מניעת שירות שעלון האבטחה MS11-100 של Microsoft מתעד.

פתרון הבעיה

יישום המגיעים למגבלה זו עבור מפתחות צורה או קבצים יכולים לשנות את ASP.NET appSetting aspnet:MaxHttpCollectionKeys, כמוצג להלן בקובץ התצורה של יישום ASP.NET. הגדרה זו מטפלת בהודעת השגיאה 1 והודעת השגיאה 2 מהסעיף "מאפייני הבעיה".

<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. הגדרה זו מטפלת בהודעת השגיאה 3 מהסעיף "מאפייני הבעיה".

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

הערה הגדלת ערך זו מעל להגדרת ברירת המחדל מגדילה את פגיעות השרת לפגיעות מסוג 'מניעת שירות' שנידונה בעלון האבטחה MS11-100.

מידע נוסף

לקבלת מידע נוסף על עלון האבטחה MS11-100, עיין במאמר TechNet הבא:

עלון האבטחה MS11-100 של Microsoft - קריטי לקבלת מידע נוסף, לחץ על מספר המאמר שלהלן כדי להציגו מתוך מאגר הידע Microsoft Knowledge Base:

2638420 MS11-100: פגיעות ב-.NET Framework עלולה לאפשר העלאת רמת הרשאות: 29.12.11

זקוק לעזרה נוספת?

מעוניין באפשרויות נוספות?

גלה את יתרונות המנוי, עיין בקורסי הדרכה, למד כיצד לאבטח את המכשיר שלך ועוד.