Microsoft는 최근 (12-29-2011) .NET Framework의 몇 가지 심각한 보안 취약점을 해결하기위한 업데이트를 발표했습니다. MS11-100에 의해 도입 된 픽스 중 하나는 해시 테이블 충돌과 관련된 잠재적 인 DoS 공격을 일시적으로 완화합니다. 이 수정 프로그램은 많은 POST 데이터가 포함 된 페이지를 손상시킵니다. 이 경우 매우 큰 확인란 목록이있는 페이지에서. 왜 이런 경우입니까?
일부 비공식 출처는 MS11-100이 포스트 백 품목에 500을 제한한다는 것을 나타냅니다. 이를 확인하는 Microsoft 소스를 찾을 수 없습니다. View State 및 기타 프레임 워크 기능 이이 한계 중 일부를 차지한다는 것을 알고 있습니다. 이 새로운 제한을 제어하는 구성 설정이 있습니까? 우리는 확인란을 사용하지 않아도되지만 특정 상황에서는 잘 작동합니다. 또한 다른 불쾌한 것들로부터 보호하기 때문에 패치를 적용하고 싶습니다.
이 게시판은 단일 HTTP POST 요청에 대해 제출할 수있는 변수의 수를 제한하여 DOS 공격 경로를 수정합니다. 기본 제한은 500이며 일반적인 웹 응용 프로그램에는 충분하지만 독일 보안 연구원의 설명에 따라 공격을 중화 할 수있을 정도로 낮습니다.
편집 : 한계 예제가있는 소스 코드 (500이 아닌 1,000으로 나타남) 표준 MVC 응용 프로그램을 만들고 기본 색인보기에 다음 코드를 추가하십시오.
@using (Html.BeginForm())
{
<fieldset class="fields">
<p class="submit">
<input type="submit" value="Submit" />
</p>
@for (var i = 0; i < 1000; i++)
{
<div> @Html.CheckBox("cb" + i.ToString(), true) </div>
}
</fieldset>
}
이 코드는 패치 이전에 작동했습니다. 이후에는 작동하지 않습니다. 오류는 다음과 같습니다
[InvalidOperationException : 개체의 현재 상태로 인해 작업이 유효하지 않습니다.]
System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded () +82 System.Web.HttpValueCollection.FillFromEncodedBytes (Byte [] bytes, Encoding encoding) +111
System.Web. HttpRequest.FillInFormCollection () +307