웹 기초 지식

<world />·2021년 5월 20일
0

공부

목록 보기
11/17
post-thumbnail
> 정보 출처: https://dreamhack.io/

웹 기초 지식

- HTTP


웹 브라우저를 사용할 때 주소창에서 HTTP 또는 HTTPS 라는 글자를 볼 수 있다. 예를 들어 웹 브라우저로 드림핵 홈페이지에 접속하면 주소창에 https://dreamhack.io 가 입력되어 있는 것을 볼 수 있다.

HTTP 또는 HTTPS라는 URI의 구성 요소 중 Scheme(Protocol)에 해당한다. Protocol(프로토콜)은 컴퓨터 내부 혹은 컴퓨터 사이에서 어떻게 데이터를 교환할지를 정의하는 규칙 체계이다.

HyperText Transfer Protocol(HTTP), HyperText Transfer Protocol Secure Socket Layer(HTTPS) 은 웹에서 이루어지는 통신을 정의한 프로토콜이다.
TCP 혹은 TLS(암호화된 TCP)를 사용해 통신하고 기본 포트로 80(HTTP), 443(HTTPS) 포트를 사용한다.

포트 번호는 서버의 설정을 통해 변경 가능하다. 무조건 서버의 포트 번호가 80, 443으로 서비스되는 것은 아니다. 예를 들어, 웹 서버 중 많이 사용되고 있는 톰캣 서버의 기본 포트 번호는 8080입니다.

HTTPS는 HTTP의 문제점인 데이터의 평문 전송을 보완하기 위해 등장하였다. 하지만 HTTP와 HTTPS의 핵심 구조 및 동작 원리는 동일하기 때문에 HTTP로 통칭하기도 한다.

HTTP는 사용자가 서버에 요청을 하는 Request와 사용자의 요청에 대한 서버의 응답인 Response로 나뉘어진다.

아래 사진에서는 HTTP의 Request와 Response의 간단한 데이터 구조이다.





웹 기초 지식

- HTTP Request


HTTP Request는 서버에 대한 요청을 의미한다. 사용자와 서버가 서로 통신을 하기 위해서는 서로가 이해할 수 있는 데이터 구조를 전달해야 한다.

HTTP의 구조에서 각각의 줄은 CRLF로 줄 바꿈이 이루어져야 한다.

HTTP Request의 구조 중 가장 첫 번째 줄에는 사용자가 서버에 요청 시 수행하고자 하는 동작인 Method, 요청하는 웹 리소스의 경로인 Path, 사용하는 HTTP의 버전을 나타내는 Version으로 구성된다.
두 번째 줄부터는 Header 부분이다. Header는 이름: 값 형태로 이루어진다.
Header는 상황에 따라 많은 데이터를 포함할 수 있기 때문에 Header 부분의 끝을 표시하기 위한 CRLF을 한 번 더 출력한다.
마지막으로 사용자의 데이터를 담는 부분인 Body가 있다.



- Request 구성 요소

  • Method: 서버에 요청 시 수행하고자 하는 동작을 나타낸다.
  • Path: 사용자가 서버에 요청하는 웹 리소스의 경로이다.
  • Version: HTTP의 버전을 나타낸다.
  • Header: 서버에 추가 정보를 전달하는 데이터 부분이다. 사용자가 입력한 데이터를 전달하기 위한 부분보다는 사용자와 서버가 상호작용하기 위한 정보를 담는 부분으로 사용된다.

- Method

메소드들은 각각의 목적을 두고 설계되었지만, 서버에서 설정하는 방식이나 웹 어플리케이션의 처리에 따라 수행하는 방식이 다르게 사용될 수 있다.

  • OPTIONS: 요청하는 리소스가 허용하는 메소드 목록을 반환한다. 예를 들어 /login 페이지가 OPTIONS, GET, POST 메소드만 허용하는 경우 OPTIONS, GET, POST가 반환된다.
  • HEAD: GET 메소드와 동일하지만, Response의 Body 부분은 받지 않고, Header만 받는다. (e.g. 서버의 상태 확인 등)
  • GET: 리소스를 요청한다. (e.g. 게시물/프로필 보기, 이미지 등)
  • POST: 특정 리소스 생성 및 데이터 추가를 위해 값을 제출할 때 사용한다. (e.g. 게시물/프로필 생성 등)
  • PUT: 특정 리소스의 내용을 보낸 값으로 설정한다. (e.g. 생성/업데이트 등)
  • PATCH: 특정 리소스의 내용 중 보낸 값의 key만 변경한다 (e.g 게시글 업데이트 등)
  • DELETE: 특정 리소스를 삭제한다. (e.g. 게시물 삭제 등)
  • TRACE: 요청받은 값을 Response의 Body로 다시 클라이언트에게 되돌려준다.

- Header

  • Host: 데이터를 보내는 서버의 주소를 의미한다.
  • Cookie: 사용자를 식별하기 위해 사용하는 정보이다.
  • User-Agent: 사용자가 사용하는 프로그램의 정보를 나타낸다.
  • Referer: 페이지 이동 시 이전 URI의 정보를 나타낸다.
  • Content-Type: 사용자가 전달하는 데이터의 처리 방식과 형식을 나타낸다. 사용자와 서버 간의 데이터 처리 방식이 일치되어야 정상적으로 데이터 통신이 이루어진다.





웹 기초 지식

- HTTP Response


HTTP Response는 사용자의 요청에 대한 서버의 응답을 의미한다.
Response의 구조도 Request의 구조와 마찬가지로 각 줄은 CRLF로 줄 바꿈이 이루어져야 한다.

HTTP Response의 구조 중 가장 첫 번째 줄에는 Version과 사용자의 요청에 대한 서버의 상태 응답 코드인 Status code로 구성된다. 두 번째 줄부터는 Header 부분이다. Header 부분의 각 줄은 이름: 값의 형태로 이루어진다. Header의 끝을 표시하기 위해 CRLF를 한 번 더 출력한 후, 서버의 응답 데이터 부분인 Body로 구성된다.

웹 해킹에서는 사용자의 입력에 의한 서버의 응답을 주목해야 한다. 예를 들어 악의적인 입력을 보냈을 때 500 Status code(Internal Sever Error)를 응답하면 해당 입력이 서버에 어떠한 영향을 끼쳤다고 짐작할 수 있고 취약점으로 도출해낼 수도 있다.


- 200 OK

Request
GET 

/index.html

HTTP/1.1
Host: dreamhack.io
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
Response
HTTP/1.1
 
200 OK
Server: Apache/2.4.29 (Ubuntu)
Content-Length: 61
Connection: Keep-Alive
Content-Type: text/html

<!doctype html>
<html>
<head>
</head>
<body>
</body>
</html>

- 404 Not Found

Request
GET
 
/not_found.html
 
HTTP/1.1
Host: dreamhack.io
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
Response
HTTP/1.1
 
404 Not Found
Server: Apache/2.4.29 (Ubuntu)
Content-Length: 255
Connection: Keep-Alive
Content-Type: text/html

<!doctype html>
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /not_found.html was not found on this server.</p>
<hr>
<address>Apache/2.4.29 (Ubuntu) Server at dreamhack.io Port 80</address>
</body></html>

- 500 Internal Server Error

Request
POST
 
/login
 
HTTP/1.1
Host: dreamhack.io
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
Content-Length: 16
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
username={공격코드}
Response
HTTP/1.1
 
500 Internal Server Error
Server: Apache/2.4.29 (Ubuntu)
Content-Length: 0
Connection: close
Content-Type: text/html



- Response 구성 요소

  • Version: HTTP의 버전을 나타낸다.
  • Status code: 사용자의 요청에 대한 서버의 처리 결과를 나타낸다.
  • Header: 사용자와 상호작용하기 위한 데이터를 담는 부분으로 사용된다. e.g. 사용자(웹 브라우저)에서 서버의 응답 데이터를 처리하는 방식 및 형식에 대한 정보, 서버에서 사용자를 식별하기 위한 쿠키 발급 정보 등
  • Body: 서버가 사용자에게 응답하는 데이터를 담는 부분이다.

- Status code

  • 200번 영역: 사용자의 요청에 대한 서버의 처리가 성공하였음을 나타낸다. -200 OK
    -201 Created
  • 300번 영역: 사용자가 요청한 리소스가 다른 경로로 변경된 경우를 나타내는 영역이다. 웹 브라우저에서 300번 영역의 응답 상태 코드가 반환되면, Response Header에 포함되어 있는 Location 헤더의 값으로 리다이렉션 한다.
    -301 Moved Permanetly
    -302 Found
  • 400번 영역: 사용자가 서버에 요청하는 구조 또는 데이터가 잘못되었음을 나타내는 영역이다.
    -400 Bad Request: 사용자가 전달한 데이터 또는 구조의 잘못된 문법으로 인하여 서버가 요청을 이해할 수 없음을 의미한다.
    -403 Forbidden: 사용자가 해당 웹 리소스에 접근할 권리를 가지고 있지 않음을 나타낸다.
    -404 Not Found: 사용자가 요청한 웹 리소스의 경로에 대해 응답할 데이터가 없음을 나타낸다.
    -405 Method Not Allowed: 사용자가 요청한 Method가 서버에는 허용하지 않는 Method임을 나타낸다.
  • 500번 영역: 서버의 에러와 관련된 영역이다.
    -500 Internal Server Error: 서버의 에러가 발생하였음을 나타낸다.
    -503 Service Unavailable: 서버가 사용자의 요청을 처리할 준비가 되지 않았음을 나타낸다.

- Header

  • Content-Type: 서버의 응답 데이터를 웹 브라우저에서 처리할 방식과 형식을 나타낸다.
  • Content-Length: 서버가 사용자에게 응답해주는 데이터의 길이를 나타낸다.
  • Server: 서버가 사용하는 소프트웨어의 정보를 나타낸다.
  • Allow: 허용되는 Method 목록을 사용자에게 알려줄 때 사용한다.
  • Location: 300번 영역의 응답 코드 사용 시 변경된 웹 리소스의 주소를 나타낸다.
  • Set-Cookie: 사용자에게 쿠키를 발급할 때 사용한다. 해당 헤더를 받은 웹 브라우저는 해당 쿠키를 저장한다.

0개의 댓글