Apache HTTP Method 예외 처리 및 제한 설정
HTTP는 요청 메서드를 정의하여 주어진 리소스에 수행하길 원하는 행동을 나타냅니다. 간혹 요청 메서드를 "HTTP 동사"라고 부르기도 합니다. 각각의 메서드는 서로 다른 의미를 구현하지만 일부 기능은 메서드 집합 간에 서로 공유하기도 합니다. 이를테면 응답 메서드는 안전하거나 캐시 가능하거나 멱등성을 가질 수 있습니다.
1. 주요 HTTP Method
대표적으로 사용되는 HTTP Method는 다음과 같습니다.
- GET : GET 메서드는 특정 리소스의 표시를 요청합니다. GET을 사용하는 요청은 오직 데이터를 받기만 합니다.
- HEAD : HEAD 메서드는 GET 메서드의 요청과 동일한 응답을 요구하지만, 응답 본문을 포함하지 않습니다.
- POST : POST 메서드는 특정 리소스에 엔티티를 제출할 때 쓰입니다. 이는 종종 서버의 상태의 변화나 부작용을 일으킵니다.
- PUT : PUT 메서드는 목적 리소스 모든 현재 표시를 요청 payload로 바꿉니다.
- DELETE : DELETE 메서드는 특정 리소스를 삭제합니다.
- CONNECT : CONNECT 메서드는 목적 리소스로 식별되는 서버로의 터널을 맺습니다.
- OPTIONS : OPTIONS 메서드는 목적 리소스의 통신을 설정하는 데 쓰입니다.
- TRACE : TRACE 메서드는 목적 리소스의 경로를 따라 메시지 loop-back 테스트를 합니다.
- PATCH : PATCH 메서드는 리소스의 부분만을 수정하는 데 쓰입니다.
보안 설정에서는 일반적으로 다음과 같이 관리합니다.
- 허용 Method : GET, POST, HEAD
- 차단 Method : PUT, DELETE, TRACE, OPTIONS 등
2. 특정 Method만 허용 (LimitExcept)
특정 Method만 허용하려면 LimitExcept 지시자를 사용할 수 있습니다.
Apache 설정
vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<Directory "/usr/local/apache2/docs/test.sangchul.kr">
<LimitExcept GET POST>
Order deny,allow
Deny from all
</LimitExcept>
Require all granted
</Directory>
설명
- GET, POST 요청만 허용
- 그 외 Method는 403 Forbidden 응답
3. Method 차단 (Limit)
특정 Method만 제한하려면 Limit 지시자를 사용할 수 있습니다.
vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<Directory "/usr/local/apache2/docs/test.sangchul.kr">
<Limit DELETE PUT OPTIONS>
Order allow,deny
#Allow from all
Deny from all
</Limit>
Require all granted
</Directory>
설명
- DELETE, PUT, OPTIONS 요청 차단
- 나머지 Method는 정상 처리
4. Apache 버전에 따른 설정 차이
Apache 2.4 이상에서는 기존 Access Control 방식이 변경되었습니다.
기존 방식 (Apache 2.2)
Order allow,deny
Allow from all
Deny from all
Apache 2.4 방식
Require all granted
Require all denied
따라서 환경에 따라 Allow from all 설정이 적용되지 않을 수 있으며 이 경우 Deny from all 방식으로 테스트해야 정상 동작할 수 있습니다.
5. curl을 이용한 Method 테스트
curl을 이용하면 특정 HTTP Method 요청을 직접 테스트할 수 있습니다.
테스트 환경
DNS를 사용하지 않고 IP를 직접 지정하기 위해 --resolve 옵션을 사용합니다.
--resolve 'domain:port:ip'
test.sangchul.kr → 123.123.123.123
6. 테스트 예제
허용되지 않은 Method 테스트
curl -X BOGUS --resolve 'test.sangchul.kr:80:123.123.123.123' -I http://test.sangchul.kr
HTTP/1.1 403 Forbidden
Date: Thu, 26 Nov 2020 08:48:35 GMT
Server: Apache
Content-Length: 209
Content-Type: text/html; charset=iso-8859-1
- 설명
- 정의되지 않은 Method 요청
- Apache에서 차단되어 403 반환
허용된 Method 테스트
curl -X GET --resolve 'test.sangchul.kr:80:123.123.123.123' -I http://test.sangchul.kr
HTTP/1.1 200 OK
Date: Thu, 26 Nov 2020 08:48:43 GMT
Server: Apache
Content-Length: 55
Content-Type: text/html; charset=UTF-8
- 설명 : GET 요청은 허용되어 정상 응답
PUT Method 테스트
curl -X PUT --resolve 'test.sangchul.kr:80:123.123.123.123' -I http://test.sangchul.kr
HTTP/1.1 403 Forbidden
Date: Thu, 26 Nov 2020 08:56:05 GMT
Server: Apache
Content-Length: 209
Content-Type: text/html; charset=iso-8859-1
- 설명 : PUT Method는 제한되어 접근 차단
임시 Method 테스트
curl -X BOGUS --resolve 'test.sangchul.kr:80:123.123.123.123' -I http://test.sangchul.kr
- 환경에 따라 결과
HTTP/1.1 200 OK
Date: Fri, 27 Nov 2020 00:42:23 GMT
Server: Apache
Content-Length: 55
Content-Type: text/html; charset=UTF-8
- 또는
HTTP/1.1 403 Forbidden
Date: Thu, 26 Nov 2020 08:56:05 GMT
Server: Apache
Content-Length: 209
Content-Type: text/html; charset=iso-8859-1
7. 보안 권장 설정
웹 서버 보안 관점에서는 다음과 같이 설정하는 것이 일반적입니다.
허용 Method
GET
POST
HEAD
차단 권장 Method
PUT
DELETE
TRACE
OPTIONS
CONNECT
PATCH
<Directory "/usr/local/apache2/htdocs">
<LimitExcept GET POST HEAD>
Require all denied
</LimitExcept>
</Directory>
참고URL
- https://developer.mozilla.org/ko/docs/Web/HTTP/Methods
- 자바공작소 : HTTP 응답코드 메소드 정리 GET, POST, PUT, PATCH, DELETE, TRACE, OPTIONS
'리눅스' 카테고리의 다른 글
| [draft] adduser 명령어 (0) | 2026.03.06 |
|---|---|
| [draft] grubby 명령어 (0) | 2026.03.06 |
| [draft] 우분투에서 sslscan을 설치하고 사용하는 방법 (0) | 2026.03.06 |
| [draft] 우분투에서 OpenSSL을 소스 코드로 컴파일하여 설치하는 방법 (0) | 2026.03.06 |
| [draft] fstab 파일의 필드 구성 (0) | 2026.03.05 |