일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- AJAX
- spring
- error
- 설정
- JavaScript
- JDBC
- SpringBoot
- PostgreSQL
- maven
- MSSQL
- oracle
- Eclipse
- MySQL
- IntelliJ
- git
- ubuntu
- Tomcat
- Python
- 문서
- Source
- STS
- Core Java
- Exception
- jpa
- Spring Boot
- Open Source
- Docker
- 오픈소스
- myBatis
- Thymeleaf
- Today
- Total
헤르메스 LIFE
경고: More than the maximum number of request parameters... 본문
환경 : Tomcat 6.0
내용 : 1000 건의 데이터를 삭제하는 상황
출처 : http://302.pe.kr/m/post/view/id/323
2013. 4. 30 오후 5:29:33 org.apache.tomcat.util.http.Parameters processParameters정보: More than the maximum number of request parameters (GET plus POST) for a single request ([10,000]) were detected. Any parameters beyond this limit have been ignored. To change this limit, set the maxParameterCount attribute on the Connector.
[해결 방안]
../Tomcat/conf/server.xml
<Connector port="8090" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" maxParameterCount="10000"/>
HashDos 공격의 막기 위한 톰캣의 제한에 따른 경고 메시지 임.
HashDos 공격은 많은 HTTP Request Parameter (String 형태)를 만들어, hash contension이 나도록 하여 CPU 부하를 주도록 하는 것으로, Web Server에서는 HTTP Request를 HashMap으로 만들어 관리 함.
0 또는 -1로 설정 시 무제한으로 설정 됨(Default는 10,000)
http://tomcat.apache.org/tomcat-7.0-doc/config/ajp.html
# 참고 자료
1) HashDos 공격 대비하기
출처 : http://seonho.blogspot.kr/2012/01/hashdos.html
[개발] HashDos 공격 대비하기
HashDos
HashDos 공격은 많은 HTTP Request Parameter (String 형태)를 만들어,
hash contension이 나도록 하여 CPU 부하를 주도록 하는 것입니다.
Web Server에서는 HTTP Request를 HashMap으로 만들어 관리합니다.
Request Parameter를 hash contention이 일어나도록 만들어 공격하는 것입니다.
약 2MB 정도의 POST HTTP Request 한번이면, i7 core 서버를 약 2분간 CPU 100% 만들어 낼 수 있습니다.
HashDos 공격 패턴
현재 공격 패턴 제작 방법을 web에서 찾을 수 있습니다.
(이를 이용하면 쉽게 공격 툴을 만들 수 있을 것 같습니다. )
http://koto.github.com/blog-kotowicz-net-examples/hashcollision/kill.html
HashDos 공격에 영향이 있는 경우
HTTP GET에는 길이 제한이 있으니, 해당하지 않습니다.
HTTP POST의 경우 길이 제한이 있고, 크지 않다면 (2MB이하) 역시 문제 되지 않습니다.
HTTP POST의 경우 parameter 개수 제한을 해야 합니다.
만약 여의치 않은 경우 스레드 하나 당 최대 동작 시간을 지정할 수 있다면 이 방법도 대응책이 될 수 있습니다.
웹 개발 환경/웹 서버 별 대응
Tomcat, PHP, Ruby 등 최신 버전에서는 HTTP Post Parameter 개수에 제한을 둘 수 있는 기능을 추가하였습니다.
개수 제한 적용을 위해서는 Tomcat, PHP, Ruby를 업데이트해야 합니다.
Tomcat
파라미터 개수를 제한하거나 POST size를 제한하는 방법이 있습니다.
파라미터 개수 제한은 Tomcat 최신 버전 (5.5.35, 6.0.35와 7.0.23)에서만 지원합니다.
POST Size 제한은 버전 업데이트 없이 할 수 있습니다.
다만 사이즈 제한 시 경우 서비스 기능에 영향에 줄 수 있고, 수백 KB 정도로 제한하더라도
지속적인 공격이 있을 경우 POST Size 제한으로는 한계가 있을 수 있습니다.
1. 파라미터 개수 제한 (maxParameterCount)
가장 좋은 방법입니다. Tomcat 5.5.35, 6.0.35와 7.0.23에서 이 기능을 지원합니다.
$TOMCAT_HOME/conf/server.xml의 Connector 부분을 다음과 같이 설정합니다.
AJP connector를 예로 들었습니다. Tomcat이 HTTP 요청을 처리하는 부분에서 해당 옵션을 사용해야합니다.
<Connector port="8009" protocol="AJP/1.3"
maxParameterCount="xxx"
…./>
. Tomcat 5.5.35, 6.0.35와 7.0.23에서 해당 옵션을 사용하지 않았을 때 디폴트 값은 10,000입니다. 만약 적용하고자 하는 서비스에 10,000 개 이상의 HTTP Parameter를 사용한다면 이 보다 큰 값을 적어야 기능 장애가 없을 것입니다. 10,000개 미만의 HTTP Parameter를 사용한다면 가급적 적게 쓰는 것이 좋을 것 같습니다.
Tomcat을 해당 버전으로 업데이트하고, HashDos 공격을 하였을 경우에는 다음과 같은 로그가 발생합니다.
# POST 로 많은 파라미터 보낼 때 Tomcat 6.0.35 의 기본 값에 의한 로그 발생 예
2011. 12. 31 오후 3:37:02 org.apache.tomcat.util.http.Parameters processParameters
경 고: More than the maximum number of request parameters (GET plus POST) for a single request ([10,000]) were detected. Any parameters beyond this limit have been ignored. To change this limit, set the maxParameterCount attribute on the Connector.
# 6.0.35 올렸을 때 발생할 수 있는 Information
아래와 같은 로그가 출력되지만, 무시하여도 좋습니다.
2011. 12. 31 오후 3:40:01 org.apache.tomcat.util.http.Parameters processParameters
정보: Invalid chunk starting at byte [91] and ending at byte [91] with a value of [null] ignored
2. 사이즈 제한 (maxPostSize)
사이즈를 제한하는 것이 서비스에 문제가 없다면 적용할 수 있습니다.
$TOMCAT_HOME/conf/server.xml의 Connector 부분을 다음과 같이 설정합니다.
AJP connector를 예로 들었습니다. Tomcat이 HTTP 요청을 처리하는 부분에서 해당 옵션을 사용해야합니다.
<Connector port="8009" protocol="AJP/1.3"
maxPostSize="xxx"
…./>
단위는 byte입니다.
아래의 예제는 Max 4G 입니다.
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
maxPostSize="4294967296"
redirectPort="8443" />