您目前已離線,請等候您的網際網路重新連線

具有大量表單金鑰、檔案或 JSON 裝載成員的 ASP.NET 請求失敗,並產生例外狀況

Windows XP 支援已結束

Microsoft 於 2014 年 4 月 8 日結束對 Windows XP 的支援。此變更已影響您的軟體更新和安全性選項。 瞭解這對您的意義為何且如何持續受保護。

Windows Server 2003 的支援已於 2015 年 7 月 14 日結束

Microsoft 已於 2015 年 7 月 14 日結束對 Windows Server 2003 的支援。此變更已影響您的軟體更新和安全性選項。 瞭解這對您的意義為何且如何持續受保護。

結論
Microsoft 安全性更新 MS11-100 會將 HTTP 要求中的表單金鑰、檔案和 JSON 裝載成員的最大數量限制為 1000。因為此變更的緣故,ASP.NET 應用程式會拒絕具有超過 1000 個上述元素的要求。發出上述種類要求的 HTTP 用戶端會遭到拒絕,而網頁瀏覽器中會出現錯誤訊息。錯誤訊息通常內含 HTTP 500 狀態碼。你可以每個應用程式為單位個別為其建立新限制。如需設定指示,請參閱<解決方式>一節。


徵狀
具有大量表單金鑰、檔案或 JSON 裝載的 ASP.NET 請求會收到來自伺服器的錯誤訊息。伺服器上的應用程式記錄檔具有內含 ASP.NET 特定版本專屬來源的警告項目及事件識別碼 1309。事件記錄檔會包含下列其中一個訊息:


訊息 1:
應用程式資訊:
應用程式定義域:/LM/W3SVC/1/ROOT/<App Domain>
信任層級:中安全性
應用程式虛擬路徑:<VDIR 路徑>
應用程式路徑:<應用程式路徑>
電腦名稱:<電腦名稱>
處理序資訊:
處理序識別碼: 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:
應用程式資訊:
Application domain:/LM/W3SVC/1/ROOT/<App Domain>
信任層級:中度
應用程式虛擬路徑:<VDIR 路徑>
應用程式路徑:<應用程式路徑>
電腦名稱:<電腦名稱>

處理序資訊:
處理序識別碼: 0001
處理序 name: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:
應用程式資訊:
Application domain:/LM/W3SVC/1/ROOT/<App Domain>
信任層級:中度
應用程式虛擬路徑:<VDIR 路徑>
應用程式路徑:<應用程式路徑>
電腦名稱:<電腦名稱>

處理序資訊:
處理序識別碼: 0001
處理序 name: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




發生的原因
資訊安全佈告欄 MS11-100 敘述的 Microsoft 安全性更新,會將表單金鑰、檔案和 JSON 成員的預設最大數量限制變更為 ASP.NET 要求可接受的 1000。此變更主要是解決 Microsoft 資訊安全佈告欄 MS11-100 文件中拒絕服務的弱點。


解決方案
達到此表單金鑰或檔案限制的應用程式可依照下方所示的 ASP.NET 應用程式設定檔內容修改 ASP.NET appSetting aspnet:MaxHttpCollectionKeys。此設定可解決<徵狀>一節中的錯誤訊息 1 和 2。
<configuration><appSettings><add key="aspnet:MaxHttpCollectionKeys" value="1000" /></appSettings></configuration>


注意 如果您是在 x86 系統上使用 ASP.NET 1.1,請將 DWORD 值新增到下列登錄機碼來調整此設定:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys
如果您是在 x64 系統上使用 ASP.NET 1.1,請將 DWORD 值新增到下列登錄機碼來調整此設定:

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



達到此 JSON 裝載限制的應用程式可依照下方所示的 ASP.NET 應用程式設定檔內容修改 ASP.NET appSetting aspnet:MaxJsonDeserializerMembers。此設定可解決<徵狀>一節中的錯誤訊息 3。
<configuration><appSettings><add key="aspnet:MaxJsonDeserializerMembers" value="1000" /></appSettings></configuration>



注意 將此值設定超過預設設定值可加強伺服器對資訊安全佈告欄 MS11-100 中所述的拒絕服務弱點的偵測能力。


参考
如需資訊安全佈告欄 MS11-100 的詳細資訊,請參閱下列 TechNet 文章: 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:
2638420 MS11-100:.NET Framework 中的弱點可能會允許權限提高:2011 年 12 月 29 日
內容

文章識別碼:2661403 - 最後檢閱時間:11/29/2012 14:37:00 - 修訂: 4.0

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, 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 Service Pack 2, Windows Vista Service Pack 2, Microsoft Windows Server 2003 Service Pack 2, Microsoft Windows XP Service Pack 3

  • atdownload kbbug kbexpertiseinter kbfix kbsecbulletin kbsecurity kbsecvulnerability KB2661403
意見反應
ent.createElement('meta');m.name='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?">