Apache httpd에서 특정 method 제한
요약
HTTP request method 중 GET이랑 POST만 주로 사용되고, 다른 메소드들은 막고 싶다. Apache httpd에서 GET과 POST만 받고 나머지 method들을 받지 않게 하려면 어떻게 해야 할까?
TL;DR
httpd.conf에 아래와 같이 limitexcept를 건다. 2.4 버전 기준
# root로 오는 전체 요청에 대하여<Location /># GET과 POST를 제외하고<LimitExcept GET POST ># 전체 차단Order deny,allDeny from all</LimitExcept></Location>
LimitExcept
LimitExcept는 Apache Httpd가 허용하는 Request Method를 명시하는 Directive 이다. Limit으로 쓰지 않는 DELETE와 같은 Method 들을 하나하나 차단할 수도 있지만 알게 모르게 새는 구멍이 생길 수 있으므로 새는 구멍이 생길 수도 있다. 그러므로 그냥 GET과 POST만 허용하게 명시할 수 있는 LimitExcept가 더 좋아보인다.
Context
directory(location과 files포함), .htaccess라고 공식 문서에는 나와 있지만 Location도 동작하며, 전체 차단을 위해서는 최상단(/)에서 막는게 좋아보인다. httpd 자체가 특정 메소드만 쓸 수 있게 글로벌 설정을 거는 것은 불가능하며 directory, location 등 서비스 별로 별도 설정이 필요하다.
모듈
core모듈에 포함되므로 추가 모듈 로딩 필요 없다. 그런데 allow/deny와 같이 사용하게 될 것이므로 mod_authz_host는 끼고 간다고 봐야 할 것 같다. 하지만 mod_authz_host를 안땡기는 경우는 없으므로 의미가 없다고 봐도 될 것 같다. 그런데와 하지만 두번의 반전!
Response
- 허용한 경우(GET POST) : 정상 응답
- 허용하지 않은 경우 : 403 Forbidden
끝
끝.
참조
[1] HTTP request methods : https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods [2] LimitExcept Driective : https://httpd.apache.org/docs/2.4/mod/core.html#limitexcept [3] mod_authz_host(apache module) : https://httpd.apache.org/docs/2.2/ko/mod/mod_authz_host.html