현재 오프라인 상태입니다. 인터넷에 다시 연결하기를 기다리고 있습니다.

많은 수의 폼 키, 파일 또는 JSON 페이로드 멤버가 있는 ASP.NET 요청이 예외를 나타내며 실패함

Windows XP에 대한 지원이 종료되었습니다.

Microsoft는 2014년 4월 8일 Windows XP에 대한 지원을 종료했습니다. 이러한 변경에 따라 해당 소프트웨어 업데이트 및 보안 옵션이 영향을 받습니다. 사용자에게 미치는 영향 및 계속 보호를 받는 방법에 대해 알아보십시오.

2015년 7월 14일 Windows Server 2003 지원 종료

Microsoft는 2015년 7월 14일 Windows Server 2003에 대한 지원을 종료했습니다. 이러한 변경에 따라 해당 소프트웨어 업데이트 및 보안 옵션이 영향을 받습니다. 사용자에게 미치는 영향 및 계속 보호를 받는 방법에 대해 알아보십시오.

요약
Microsoft 보안 업데이트 MS11-100은 HTTP 요청에서 폼 키, 파일 및 JSON 멤버의 최대 수를 1000개로 제한합니다. 이러한 변경 내용 때문에 ASP.NET 응용 프로그램은 이러한 요소가 1000개를 넘을 경우 요청을 거부합니다. 이러한 종류의 요청을 수행하는 HTTP 클라이언트는 거부되며 웹 브라우저에서 오류 메시지가 나타납니다. 이 오류 메시지는 일반적으로 HTTP 500 상태 코드를 포함합니다. 이러한 새로운 제한은 응용 프로그램 단위로 구성될 수 있습니다. 구성 지침에 대해서는 "해결 방법" 절을 참조하십시오.


현상
많은 수의 폼 키, 파일 또는 JSON 페이로드가 있는 ASP.NET 요청이 수행되면 서버에서 오류 응답이 수신됩니다. 서버의 응용 프로그램 로그는 특정 버전의 ASP.NET이 소스인 경고 항목과 이벤트 ID 1309를 포함합니다. 이벤트 로그에는 다음 메시지 중 하나가 포함됩니다.


메시지 1:
응용 프로그램 정보:
응용 프로그램 도메인: /LM/W3SVC/1/ROOT/<App Domain>
신뢰 수준: 보통
응용 프로그램 가상 경로: <VDIR 경로>
응용 프로그램 경로: <응용 프로그램 경로>
시스템 이름: <시스템 이름>
프로세스 정보:
프로세스 ID: 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 경로>
응용 프로그램 경로: <응용 프로그램 경로>
시스템 이름: <시스템 이름>

프로세스 정보:
프로세스 ID: 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 경로>
응용 프로그램 경로: <응용 프로그램 경로>
시스템 이름: <시스템 이름>

프로세스 정보:
프로세스 ID: 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




원인
보안 공지 MS11-100에 나오는 Microsoft 보안 업데이트는 요청에서 ASP.NET이 수락하는 폼 키, 파일 및 JSON 멤버의 최대 기본 개수를 1,000으로 변경합니다. 이러한 변경은 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일
속성

문서 ID: 2661403 - 마지막 검토: 11/29/2012 14:35: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
피드백
ript> html>ml>&t=">src="https://c1.microsoft.com/c.gif?DI=4050&did=1&t=">"text/JavaScript" async=""> var varAutoFirePV = 1; var varClickTracking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write("