목차
1. HTTP Request Method
- GET: 클라이언트가 서버에게 URL에 해당하는 자료의 전송을 요청
- HEAD: GET 요청으로 반환될 데이터 중 헤더 부분에 해당하는 데이터만 요청(바디 제외)
- POST: 클라이언트가 서버에서 처리할 수 있는 자료를 보냄
- PUT: 클라이언트가 서버에게 지정한 URL에 지정한 데이터를 저장할 것을 요청
- DELETE: 클라이언트가 서버에게 지정한 URL의 정보를 제거할 것을 요청
- CONNECT: 클라이언트가 특정 종류의 프록시 서버에게 연결을 요청
- OPTIONS: 해당 URL에서 지원하는 요청 메세지의 목록을 요청(허용된 Method 확인)
- TRACE: 클라이언트가 서버에게 송신한 요청의 내용을 반환해 줄 것을 요청
- PATCH: 클라이언트가 서버에게 지정한 URL의 데이터를 부분적으로 수정할 것을 요청
2. 제한 Method 정의
Method 모두 열고 특정 Method를 제한하는 방식입니다.
이 방식은 Method 제한이 잘 안 될 수도 있으므로 LimitExcept를 이용하는 것을 추천합니다.
1. httpd.conf 파일 백업하기(백업을 생활화합니다.)
일반적으로 파일 경로는 /etc/httpd/conf 에 설정 httpd.conf 파일이 존재합니다. (CentOS7)
# cp httpd.conf httpd.conf.backup
# ll
합계 40
-rw-r--r--. 1 root root 12003 11월 15 16:49 httpd.conf
-rw-r--r--. 1 root root 12003 11월 15 16:53 httpd.conf.backup
-rw-r--r--. 1 root root 13064 11월 17 2020 magic
2. vi or vim 이용해 httpd.conf 파일을 수정합니다.
- 설정이 필요한 Directory에 Limit을 이용해 막고자 하는 HTTP Method를 입력합니다.
<Directory />
<Limit DELETE OPTIONS>
Order allow,deny
Allow from all
</Limit>
</Directory>
- TRACE 메소드를 막고 싶은 경우 httpd.conf 파일 맨 밑에 다음과 같이 작성합니다.
TraceEnable Off
3. 아파치 재시작
# systemctl restart httpd
3. 제한 제외 Method 정의
Method 모두 막고 특정 Method를 허용하는 방식입니다.
1. httpd.conf 파일 백업하기(백업을 생활화합니다.)
일반적으로 파일 경로는 /etc/httpd/conf 에 설정 httpd.conf 파일이 존재합니다. (CentOS7)
# cp httpd.conf httpd.conf.backup
# ll
합계 40
-rw-r--r--. 1 root root 12003 11월 15 16:49 httpd.conf
-rw-r--r--. 1 root root 12003 11월 15 16:53 httpd.conf.backup
-rw-r--r--. 1 root root 13064 11월 17 2020 magic
2. vi or vim 이용해 httpd.conf 파일을 수정합니다.
- 설정이 필요한 Directory에 LimitExcept을 이용해 제한하고자 하는 HTTP Method를 입력합니다.
<Directory />
<LimitExcept GET POST>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
- TRACE 메소드를 막고 싶은 경우 httpd.conf 파일 맨 밑에 다음과 같이 작성합니다.
TraceEnable Off
3. 아파치 재시작
# systemctl restart httpd
4. Curl HTTP Method 점검
1. 현재 허용된 Method 확인(OPTIONS 허용된 경우)
< Allow: POST, OPTIONS, GET, HEAD, TRACE를 보면 허용된 메소드를 확인할 수 있습니다.
# curl -v -X OPTIONS localhost
* About to connect() to localhost port 80 (#0)
* Trying ::1...
* Connected to localhost (::1) port 80 (#0)
> OPTIONS / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: localhost
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Mon, 15 Nov 2021 07:57:28 GMT
< Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips
< Allow: POST,OPTIONS,GET,HEAD,TRACE
< Content-Length: 0
< Content-Type: httpd/unix-directory
<
* Connection #0 to host localhost left intact
2. HEAD Method 확인
# curl -I localhost
HTTP/1.1 403 Forbidden
Date: Mon, 15 Nov 2021 08:19:04 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips
Last-Modified: Thu, 16 Oct 2014 13:20:58 GMT
ETag: "1321-5058a1e728280"
Accept-Ranges: bytes
Content-Length: 4897
Content-Type: text/html; charset=UTF-8
3. Http Method 확인
[curl 옵션]
-X : HTTP 메서드를 설정할 수 있다.
-I : 헤더 요청만 받는다.
-v : 자세하게 출력한다.
# curl -v -X OPTIONS localhost
* About to connect() to localhost port 80 (#0)
* Trying ::1...
* Connected to localhost (::1) port 80 (#0)
> OPTIONS / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: localhost
> Accept: */*
>
< HTTP/1.1 403 Forbidden
< Date: Mon, 15 Nov 2021 08:32:01 GMT
< Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips
< Last-Modified: Thu, 16 Oct 2014 13:20:58 GMT
< ETag: "1321-5058a1e728280"
< Accept-Ranges: bytes
< Content-Length: 4897
< Content-Type: text/html; charset=UTF-8
<
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Apache HTTP Server Test Page powered by CentOS</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
( ... ) 생략
# curl -I -X OPTIONS localhost
HTTP/1.1 403 Forbidden
Date: Mon, 15 Nov 2021 08:32:38 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips
Last-Modified: Thu, 16 Oct 2014 13:20:58 GMT
ETag: "1321-5058a1e728280"
Accept-Ranges: bytes
Content-Length: 4897
Content-Type: text/html; charset=UTF-8
'ETC' 카테고리의 다른 글
JWT(JSON Web Token) 구조 (0) | 2021.12.30 |
---|---|
[보안] 암호화와 복호화 그리고 암호 알고리즘 종류 (0) | 2021.08.06 |