ASP.NET MS11-100: 게시된 양식 값의 최대 수에 대한 제한을 변경하려면 어떻게 해야 합니까?
Microsoft(12-29-2011)는 최근 의 몇 가지 심각한 보안 취약성을 해결하기 위한 업데이트를 릴리스했습니다.NET Framework.MS11-100에 의해 도입된 수정 사항 중 하나는 해시 테이블 충돌과 관련된 잠재적인 DoS 공격을 일시적으로 완화합니다.이 수정 프로그램은 많은 POST 데이터가 포함된 페이지를 구분하는 것으로 나타납니다.이 경우 확인란 목록이 매우 큰 페이지입니다.왜 그럴까요?
일부 비공식적인 출처에 따르면 MS11-100은 포스트백 항목에 500개의 제한을 두고 있습니다.이를 확인할 수 있는 Microsoft 소스를 찾을 수 없습니다.View State 및 기타 프레임워크 기능이 이 제한의 일부를 차지한다는 것을 알고 있습니다.이 새 제한을 제어하는 구성 설정이 있습니까?확인란을 사용하지 않을 수도 있지만 특정 상황에 적합합니다.패치가 다른 불쾌한 것들로부터 보호해주기 때문에 패치를 적용하고 싶습니다.
게시판은 단일 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는 이틀 전 이 설정에 대해 트윗했습니다.
- http://twitter.com/ #!/tr_tr_mitya/status/152473667102715904
- http://twitter.com/ #!/tr_tr_mitya/status/152475158941138944
다음은 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
'programing' 카테고리의 다른 글
| Bash의 파일에서 마지막 줄 제거 (0) | 2023.05.04 |
|---|---|
| StackExchange에서 항목을 모두 제거/삭제합니다.다시 캐시 (0) | 2023.05.04 |
| Xcode 10, 명령 코드 서명이 0이 아닌 종료 코드로 실패했습니다. (0) | 2023.05.04 |
| SQL에 if-then-else 논리가 있습니까? (0) | 2023.05.04 |
| 그래픽으로 표시할 수 없는 Excel의 외부 데이터 쿼리에 매개 변수를 추가하는 방법은 무엇입니까? (0) | 2023.05.04 |