programing

ASP.NET MS11-100: 게시된 양식 값의 최대 수에 대한 제한을 변경하려면 어떻게 해야 합니까?

easyjava 2023. 5. 4. 20:42
반응형

ASP.NET MS11-100: 게시된 양식 값의 최대 수에 대한 제한을 변경하려면 어떻게 해야 합니까?

Microsoft(12-29-2011)는 최근 의 몇 가지 심각한 보안 취약성을 해결하기 위한 업데이트를 릴리스했습니다.NET Framework.MS11-100에 의해 도입된 수정 사항 중 하나는 해시 테이블 충돌과 관련된 잠재적인 DoS 공격을 일시적으로 완화합니다.이 수정 프로그램은 많은 POST 데이터가 포함된 페이지를 구분하는 것으로 나타납니다.이 경우 확인란 목록이 매우 큰 페이지입니다.왜 그럴까요?

일부 비공식적인 출처에 따르면 MS11-100은 포스트백 항목에 500개의 제한을 두고 있습니다.이를 확인할 수 있는 Microsoft 소스를 찾을 수 없습니다.View State 및 기타 프레임워크 기능이 이 제한의 일부를 차지한다는 것을 알고 있습니다.이 새 제한을 제어하는 구성 설정이 있습니까?확인란을 사용하지 않을 수도 있지만 특정 상황에 적합합니다.패치가 다른 불쾌한 것들로부터 보호해주기 때문에 패치를 적용하고 싶습니다.

500 제한에 대한 비공식 소식통:

게시판은 단일 HTTP POST 요청에 대해 제출할 수 있는 변수의 수에 제한을 제공하여 DOS 공격 벡터를 수정합니다.기본 제한은 500으로 일반 웹 애플리케이션에 충분해야 하지만 독일 보안 연구원이 설명한 대로 공격을 무력화할 수 있을 정도로 낮습니다.

EDIT: 제한 예제가 있는 소스 코드(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>
}

이 코드는 패치 이전에 작동했습니다.그 후에는 작동하지 않습니다.오류:

잘못된 작업]: 개체의 현재 상태로 인해 작업이 유효하지 않습니다.]
시스템.Web.HttpValueCollection 파일입니다.ThrowIfMaxHttpCollectionKeysExceeded() +82 시스템.Web.HttpValueCollection 파일입니다., Encoding Encoding) +111 바에서채우기바([]바이트딩, 인코트) +111
시스템.Web.HttpRequest. In Form Collection +307 () +307

web.config에 이 설정을 추가해 보십시오.저는 방금 이것을 시험해봤습니다.ASP를 사용하는 NET 4.0.NET MVC 2 프로젝트와 이 설정으로 코드가 느려지지 않습니다.

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

이제(보안 업데이트를 적용한 후) 제한을 변경할 수 있습니다.


클래스를 했는데 HttpValueCollection HttpValueCollection 가 없습니다.ThrowIfMaxHttpCollectionKeysExceeded방법:

여기에 이미지 설명 입력

KB2656351(에 대한 업데이트)을 설치했습니다.NET 4.0), Reflector에서 어셈블리를 다시 로드하면 다음과 같은 방법이 나타납니다.

여기에 이미지 설명 입력

그래서 그 방법은 확실히 새로운 것입니다.Reflector의 Disassembly 옵션을 사용했는데 코드를 보면 AppSetting을 확인합니다.

if (this.Count >= AppSettings.MaxHttpCollectionKeys)
{
  throw new InvalidOperationException();
}

web.config 파일에서 합니다.System.Web.Util.AppSettings.EnsureSettingsLoaded(내부 정적 클래스):

 _maxHttpCollectionKeys = 0x3e8;

또한 Alexey Gusarov는 이틀 전 이 설정에 대해 트윗했습니다.

다음은 Jonathan Ness(MSRC 보안 개발 관리자) 및 Pete Voss(Sr.)와의 Q&A에서 공식 답변입니다.응답 커뮤니케이션 관리자, 신뢰할 수 있는 컴퓨팅):

Q: 앱 설정입니다.MaxHttpCollectionKeys 최대 폼 항목 수를 포함하는 새 매개 변수를 선택하십시오.

A: 네.

아직 을 사용하시는 분들을 위해서요.NET 1.1, 이 설정은 web.config를 통해 구성되지 않습니다. 레지스트리 설정입니다(리플렉터를 통해 그가 답을 찾은 것과 동일한 방법으로만 발견했기 때문에 Michielvoo에 대한 hat 팁).에서는 아래의예다같습다니과음을 설정합니다.MaxHttpCollectionKeys의 Windows에서 으로: 32비트 버전의 Windows에서 5000으로:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0]
"MaxHttpCollectionKeys"=dword:00001388

64비트 Windows 버전의 경우 Wow6432 노드에서 키를 설정합니다.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\ASP.NET\1.1.4322.0]
"MaxHttpCollectionKeys"=dword:00001388

저는 단지 이상한 것을 보는 사람들을 위해 여기에 제 0.02달러를 추가하고 싶습니다.

프로그램이 페이지 정보를 ASP에 저장하는 경우.NET ViewState가 웹 서버 임계값을 초과하면 이 문제가 발생합니다.web.config fix 문제를 바로 적용하는 대신 코드 최적화를 먼저 검토하는 것이 좋습니다.

소스를 보고 1000개 이상의 뷰 상태 숨겨진 필드를 찾으면 문제가 발생합니다.

ASP를 사용하는 경우.NET CORE Startup#ConfigureServices 내에서 이 설정을 설정할 수 있습니다.

services.Configure<FormOptions>(options => options.ValueCountLimit = 1000); // you may want to adjust this limit

참조:스택 오버플로

ThrowIfMaxHttpCollectionKeysExceeded() 에추되습다에 되었습니다.System.Web.HttpCookieCollection.

때가 된 것 같습니다.HttpCookieCollection.Get()으로 호됩다니출라고 부릅니다. 내부적으로 호출됩니다.HttpCookieCollection.AddCookie()그러면 그것이 부르고 있는 것입니다.ThrowIfMaxHttpCollectionKeysExceeded().

public HttpCookie Get(string name)
{
    HttpCookie cookie = (HttpCookie) base.BaseGet(name);
    if ((cookie == null) && (this._response != null))
    {
        cookie = new HttpCookie(name);
        this.AddCookie(cookie, true);
        this._response.OnCookieAdd(cookie);
    }
    return cookie;
}

internal void AddCookie(HttpCookie cookie, bool append)
{
    this.ThrowIfMaxHttpCollectionKeysExceeded();
    this._all = null;
    this._allKeys = null;
    if (append)
    {
        cookie.Added = true;
        base.BaseAdd(cookie.Name, cookie);
    }
    else
    {
        if (base.BaseGet(cookie.Name) != null)
        {
            cookie.Changed = true;
        }
        base.BaseSet(cookie.Name, cookie);
    }
}

있는 몇 더 입니다.InvalidOperationExcpetion그런 다음 앱 풀을 재활용하여 몇 시간 동안 문제를 해결합니다.

언급URL : https://stackoverflow.com/questions/8684049/asp-net-ms11-100-how-can-i-change-the-limit-on-the-maximum-number-of-posted-for

반응형