HTTP 프로토콜 정의와 동작 방식
HTTP는 클라이언트와 서버 간 통신에 사용하는 애플리케이션 계층 프로토콜입니다.
HTTP는 다음과 같은 특징을 가지고 있습니다.
Clinet-Server 구조
- HTTP는 Client와 Server 간 통신을 기반으로 동작한다.
- Client는 요청을 보내는 주체 (전화를 거는 사람, 즉 송신자) 역할을 한다.
Server는 요청을 받는 주체 (전화를 받는 사람, 즉 수신자) 역할을 한다. - Client는 요청(Request)를 보내고 응답이 올 때까지 대기하며 Server는 Client에서 보내는 요청을 받아 처리하고 응답을 Client에게 다시 보내주게 된다.
- Client-Server의 구조는 Request-Response 구조를 가지고 있다.
비 연결성 (Connectionless)
- 비 연결성은 통신을 계속하고 있는것이 아닌 용건이 끝나면 연결을 종료하는 방식을 가지고 있다.
- Client - Server가 각 요청/응답마다 새로운 연결이 형성되며 요청/응답이 끝난 후에는 연결이 종료된다.
불 필요한 연결을 하지 않기 때문에 서버 유지 자원을 아낄 수 있다. - 서버 유지 자원을 효율적으로 사용가능하다.
무 상태성 (Stateless)
- Client - Server의 요청은 독립적이며 이전 요청의 정보를 유지하지 않는다.
- 서버가 이전 상태를 보존하고 있지 않기 때문에 아무 서버나 호출해서 응답을 받을 수 있다.
GET & POST 방식
GET과 POST는 Web Application에서 Server와 Client 간의 데이터 전송에 사용하는 2가지 HTTP 요청 방법이다.
GET 방식
GET 방식은 주로 서버에서 정보를 요청할 때 사용되며 일반적으로 데이터를 서버에 보내지 않고 서버에 특정 리소스를 요청하는 형태를 가지고 있으며, 데이터는 주로 url의 쿼리 문자열에 포함된다.
GET 방식으로 요청을 보낼 때 필요한 데이터를 Body에 넣는 것이 아닌 쿼리 스트링(query string) 형태로 전송된다.
쿼리 스트링은 URL 끝에 데이터 이름과 값이 한 쌍으로 이루어진 요청 파라미터를 쿼리 스트링이라고 한다.
1. 요청 메소드 : GET 메소드를 사용해서 요청페이지 작성
<form action="http://example.com/search" method="GET">
<input type="text" name="query">
<button type= submit> search
</button>
</form>
2. GET방식을 이용해서 사용자가 입력한 GET 방식으로 전송하면 아래와 같은 URL로 서버에게 요청된다.
http://example.com/search?query=apple
[특징]
- URL에 데이터를 포함시켜서 요청
- 데이터를 Header에 포함하여 전송함
- URL에 노출이 되기 때문에 보안에 취약하다.
- 서버의 리소스를 조회하기 때문에 캐싱이 가능하다.
- 데이터크기가 제한되며 평균적으로 2048자까지 지원된다.
POST 방식
POST 방식은 주로 서버에 데이터를 제출하거나 서버의 상태를 변경하기 위해 사용된다. GET과 달리 전송할 데이터를 HTTP 메시지의 Body에 담아서 전송한다.
아래 코드에서는 사용자가 파일을 선택하여 POST방식으로 전송한다. HTTP 메시지에 Body에 담아서 전송하기 때문에 URL에는 데이터가 포함되지 않는다.
1. 요청 메소드 : POST 메소드를 사용해서 전송 메소드 작성
<form action="http://example.com/" method="POST" enctype="multipart/form-data">
<input type="file" name="userfile">
<input type="submit" value="UPLOAD">
</form>
2. POST 방식을 이용하기 때문에 URL에서는 데이터가 포함되지 않는 URL이 나온다.
http://example.com/upload
[특징]
- 데이터를 Body에 포함시키기 때문에 URL에 노출되지 않는다.
- URL에 노출되지 않기 때문에 약간의 보안은 보장된다.
- 캐싱이 불가능하다.
- 데이터 크기에 대해서 제한이 없다.
GET & POST 방식 비교
특성 | GET | POST |
데이터 전송위치 | URL 쿼리 문자열 | 요청 본문 (Body) |
데이터 크기 제한 | 있음 ( 보통 2048자 제한) | 없음 (서버 설정에 따라 변동성있음) |
보안성 | 낮음 (URL 에 노출됨) | GET형식보다 높음 (데이터가 본문에 포함됨) |
캐싱 | 가능 | 불가능 |
멱등성 | 멱등적 | 비멱등적 |
주 사용 사례 | 검색 기능, 페이지 탐색 | 데이터전송, 파일업로드, 서버 상태 변경 |
상태 변경 | 없음 | 있음 |
'CERT > Web' 카테고리의 다른 글
[Web] PHP기반 WebShell 인증기능 추가 (part2) (0) | 2024.09.23 |
---|---|
[Web] PHP기반 간단한 명령어 실행 WebShell 제작 (part1) (0) | 2024.09.23 |
[Web] PHP기반으로 Web에서 파일 업로드 제작 (0) | 2024.09.17 |
[웹 취약점] 웹 셸(Web shell) 정의 및 종류 (1) | 2024.09.16 |
[웹 취약점] 파일 업로드 및 다운로드 취약점 개념 (1) | 2024.09.16 |