본문 바로가기

개념정리/Web Hacking

1. HTTP/HTTPS

 

드림핵을 참고하여 웹 해킹에 대하여 공부할 것이다.

이번 시간은 웹 해킹에 필요한 배경 지식인 HTTP/HTTPS에 대하여 공부할 것이다.

 


1. 인코딩

컴퓨터의 모든 데이터는 0과 1로 구성된다. 0과 1로 우리의 문자를 표현하는 것은 약속 덕분이다. 이러한 약속들을 인코딩 표준이라고 부른다. 대표적으로 1) 아스키(ASCii)2) 유니코드(Unicode)가 있다.

1) 아스키 코드(ASCii)

아스키 코드는 7비트 데이터에 대한 인코딩 표준이다. 33개의 출력 불가능한 제어 문자들과 공백을 비롯한 95개의 출력 가능 문자들로 총 128개로 이루어져 있다. 

2) 유니코드(Unicode)

전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준이다. 유니코드에서 한 문자는 최대 32개의 비트로 표현된다. 32비트로 표현할 수 있는 정보의 가짓수는 232, 대략 42억개 정도 표현할 수 있다. 전 세계의 문자를 표현하고도 남는다.  

 

2. 통신 프로토콜

웹 서버에 있는 리소스를 클라이언트가 받아 보려면 웹에게 특정 리소스를 지정하여 제공해달라고 요청해야 한다. 그러면 서버가 해당 요청을 이해하고 대응되는 동작을 통해 클라이언트에게 리소스를 반환한다. 여기서 클라이언트의 행위를 요청(Request), 서버의 행위를 응답(Response)이라고 한다. 

프로토콜은 컴퓨터 내부 또는 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙 체계이다. 컴퓨터와 통신할 때는 엄격한 프로토콜을 사용한다. 왜냐하면 컴퓨터가 해석의 융통성을 발휘하는 것은 어렵고, 이과정에서 오히려 통신 오류가 발생할 가능성을 높이기 때문이다. 그래서 일반적으로 교환하는 데이터를 명확히 해석할 수 있도록 문법을 포함한다. 이 문법에 어긋나는 메시지는 잘못 전송된 것으로 취급한다.

현재까지 제정된 표준 통신 프로토콜에는 네크워크 통신의 기초인 TCP/IP, 웹 애플리케이션이 사용되는 HTTP, 파일을 주고받을 때 사용하는 FTP 등 많은 종류가 있다.

 

3. HTTP

HTTP란 서버와 클라이언트의 데이터 교환을 요청(Request)과 응답(Response) 형식으로 정의한 프로토콜이다. 기본 메커니즘은 클라이언트가 서버에게 요청하면, 서버가 응답하는 것이다. 웹 서버는 HTTP 서버를 HTTP 서비스 포트에 대기시킨다. 이 포트는 일반적으로 TCP/80 또는 TCP/8080이다. 클라이언트가 서비스 포트에 HTTP 요청을 전송하면 이를 해석하여 적절한 응답을 반환한다. 

- 네크워크 포트 : 네크워크에서 서버와 클라이언트가 정보를 교환하는 추상화된 장소를 의미한다. 클라이언트가 서버의 포트에 접근하여 데이터를 내려놓고, 서버가 클라이언트에 보낼 데이터를 실어서 돌려보내는 항구라고 생각하면 쉽다.

- 서비스 포트 : 네트워크 포트 중 특정 서비스가 점유하고 있는 포트를 의미한다. 예를 들어, HTTP가 80번 포트를 점유하고 있다면 HTTP의 서비스 포트는 80번 포트가 된다.

 

4. HTTP 메시지

HTTP 메시지에는 클라이언트가 전송하는 HTTP 요청, 그리고 서버가 반환하는 HTTP 응답이 있다. 요청과 응답의 기능과 세부 구조는 차이가 있지만, 1) HTTP 헤드2) HTTP 바디로 구성된다는 공통점이 있다.

HTTP 메시지(출처 : 드림핵)

1) HTTP 헤드

HTTP 헤드의 각 줄은 CRLF로 구분되며 첫 줄은 시작줄, 나머지 줄은 헤더라고 부른다. 헤드의 끝은 CRLF 한줄로 나타낸다. 헤더는 필드와 값으로 구성되며 HTTP 메시지 또는 바디의 속성을 나타낸다. 하나의 HTTP 메시지에는 0개 이상의 헤더가 있을 수 있다.

2) HTTP 바디

HTTP 바디는 헤드의 끝을 나타내는 CRLF 뒤에 모든 줄을 말한다. 클라이언트나 서버에게 전송하려는 데이터가 바디에 담긴다.

 

5. HTTP 요청

HTTP 요청은 서버에게 특정 동작을 요구하는 메시지이다. 서버는 해당 동작이 실현 가능한지 클라이언트가 그러한 동작을 요청할 권한이 있는지 검토하고 적절할 때만 처리한다.

1) 시작 줄

HTTP 요청의 시작 줄은 메소드(Method), 요청 URI, HTTP 버전으로 구성된다.

  • 메소드 : URI가 가리키는 리소스를 대상으로 서버가 수행하길 바라는 동작을 나타낸다.(GET, POST)
  • 요청 URI : 메소드의 대상을 나타낸다.
  • HTTP 버전 : 클라이언트가 사용하는 HTTP 프로토콜의 버전을 나타낸다.

2) 헤더와 바디

헤더는 필드와 값으로 구성되며 HTTP 메시지 또는 바디의 속성을 나타낸다. 바디는 클라이언트나 서버에게 전송하려는 데이터를 담고 있다.

 

6. HTTP 응답

HTTP 응답은 HTTP 요청에 대한 결과를 반환하는 메시지이다. 요청을 수행한지, 한한지, 안했다면 그 이유가 무엇인지 같은 상태정보, 그리고 클라이언트에게 전송할 리소스가 응답에 포함된다.

1) 시작 줄

HTTP 응답의 시작 줄은 HTTP 버전, 상태 코드, 처리 사유로 구성된다.

  • HTTP 버전 :서버에서 사용하는 HTTP 프로토콜의 버전을 나타낸다.
  • 상태 코드 : 요청에 대한 처리 결과를 세 자리 숫자로 나타낸다.
  • 처리 사유 : 상태 코드가 발생한 이유를 짧게 기술한다.
상태 코드 설명 예시
1XX 요청을 제대로 받고 처리 진행중  
2XX 요청이 제대로 처리됨 200 : 성공
3XX 요청을 처리하려면, 클라이언트가 추가 동작을 해야함 302 : 다른 URL로 갈 것
4XX 클라이언트가 잘못된 요청을 보내어 처리가 실패 400 : 요청이 문법에 맞지 않음
403 : 클라이언트가 리소스에 요청할 권한이 없음
404 : 리소스가 없음
5XX 클라이언트의 요청은 유효하지만 서버에서 에러가 발생하여 처리 실패 500 : 요청을 처리하다가 에러가 발생
503 : 서버가 과부하로 인해 요청을 처리할 수 없음

2) 헤더와 바디

헤더는 필드와 값으로 구성되며 HTTP 메시지 또는 바디의 속성을 나타낸다. 바디는 클라이언트나 서버에게 전송하려는 데이터를 담고 있다.

 

7. HTTPS

HTTP의 응답과 요청은 평문으로 전달된다. 만약 누군가 가로챈다면 중요한 정보가 유출될 가능성이 있다. HTTPS는 TLS(Transport Layer Security) 프로토콜을 도입하여 이런 문제점을 보완하였다. TLS는 서버와 클라이언트 사이에 오가는 모든 HTTP 메시지를 암호화한다. 공격자가 중간에 메시지를 탈취하더라도 이를 해석하는 것은 불가능하며, 결과적으로 HTTP 통신이 도청과 변조로 부터 보호된다.

HTTPS가 제정된 초기에는 금융이나 정부 서비스와 같이 민감한 데이터를 취급하는 웹 서비스들 위주로 HTTPS가 사용되었다. 하지만 지금은 서비스들의 규모에 상관없이 모두 HTTPS를 사용하는 추세이다. 웹 서버의 URL이 https://로 시작되면 HTTPS 프로토콜을 사용한다.

 


 

이번 시간은 HTTP/HTTPS에 대하여 공부하였다.

다음 시간은 WEB에 대하여 공부할 것이다.

 

'개념정리 > Web Hacking' 카테고리의 다른 글

[Web Hacking] Cross Site Scripting : XSS  (0) 2022.08.11
4. Cookie & Session  (0) 2022.08.02
3. Web Browser  (0) 2022.08.02
2. Web  (0) 2022.08.01