Web Hacking - Background : HTTP/HTTPS

통신 프로토콜

프로토콜은 규격화된 상호작용(클라이언트와 서버 간의 요청과 응답)에 적용되는 약속으로, 통신 시스템이 데이터를 교환하기 위해 사용하는 통신 규칙이다.

컴퓨터는 해석의 융통성을 가지고 있지 않기 때문에, 엄격한 프로토콜을 사용해야한다. 프로토콜은 명확한 해석을 위해 문법을 사용하며, 이에 어긋나는 메세지는 무시한다.

HTTP (Hyper Text Transfer Protocol)

HTTP는 서버-클라이언트 모델을 따라 데이터를 주고 받기 위한 프로코롤로, 80번 포트를 사용한다. 상태를 지니지 않은 비상태 프로토콜 (stateless) 이며, Method, Path, Version, Headers, Body로 구성된다.

포트로 데이터를 교환하는 과정에서는 전송 계층에서 결정한 프로토콜(TCP/UDP)을 사용한다.

비상태 프로토콜 : TCP 연결이 설정되며 요청과 응답이 진행되고, 이 과정이 끝나면 TCP 연결이 즉시 해제된다. 따라서, 클라이언트와 서버 사이에 연결에 따른 상태 정보가 존재하지 않는다. 이러한 연결 방식은 단발성이기에, 웹문서가 크고 복잡할 경우 문제가 생긴다.

HTTP 메세지

HTTP 요청

HTTP 응답

상태코드 설명 대표예시
1xx 요청을 제대로 받았으며 처리가 진행 중임  
2xx 요청이 제대로 처리됨 ex) 200 : 성공
3xx 요청을 처리하려면, 클라이언트의 추가 동작이 필요함 ex) 302 : 다른 URL로 갈 것
4xx 잘못된 요청으로 처리에 실패 ex) 400 : 요청이 문법에 맞지 않음
403: 리소스에 접근 권한이 없음
404: 리소스가 없음
5xx 요청은 유효하였으나 서버 에러로 인해 처리 실패 ex) 500 : 요청을 처리하던 중 에러 발생
503 : 서버 과부하로 인한 요청 처리 불가

HTTP Method

  • GET : URL이 가리키는 웹 문서의 내용을 전송하도록 요구 - 회신되는 응답 메세지의 body에 포함됨
  • HEAD : GET과 비슷하지만, 실제 문서가 아닌 문서 정보를 요청 - response body 존재하지 않음 header만 존재
  • POST : 클라이언트가 서버로 정보를 전송 (게시글 작성, 로그인, etc …)
  • PUT : 클라이언트가 서버로 정보를 전송 (주로 갱신에 사용)
  • DELETE : 웹 리소스 삭제 - 서버에서 클라이언트의 요청을 무시하기도 함
  • OPTIOINS : 웹 서버측에서 제공 가능한 메소드가 무엇인 지에 대한 질의
  • TRACE : 요청 리소스가 수신되는 경로를 보여줌
  • CONNECT : 요청한 리소스에 대한 양방향 연결을 시작. 프록시 서버에게 원하는 웹 서버와의 중계 연결을 요청함

메소드의 보안성

GET, POST 외의 메소드는 악용되어 크로스 사이트 스크립팅, 또는 홈페이지 변조에 활용될 수 있으며, 특히 PUT, DELETE 메소드는 원격 웹 서버에 파일을 생성하거나 삭제하는 FTP와 유사한 기능을 구현 가능하다. 이러한 보안상의 이유로, 대부분의 웹서버는 일반적으로 GET, POST 2개 또는 OPTIONS를 포함한 3개의 메소드만 허용한다.

HTTPS (HTTP over Secure socket layer)

HTTP의 응답, 요청 방식은 평문으로 전달되는 특성 때문에 정보 유출의 위험이 있다.

따라서, HTTPS는 이러한 보안적 문제를 해결하기 위해 HTTP에 TLS와 같은 암호화 프로토콜(L4)을 도입하였다. 과거에는 민감한 데이터를 다루는 웹 서비스 위주로 HTTPS를 사용하였으나, 현재는 대부분의 웹사이트에서 필수적으로 HTTPS를 사용하는 추세이다.

SSL vs TLS

  • SSL(Secure Scokets Layer) : 암호화 기반 인터넷 보안 프로토콜로, 전달되는 모든 데이터를 암호화하여 탈취하더라고 해석이 불가능하도록 하며, 특정한 유형의 사이버 공격을 차단한다.
  • TLS(Transport Layer Security) : IETF에서 유지/관리하는 SSL의 업데이트 버전으로, SSL과 같은 역할을 하며 명칭만 다른 프로토콜이다.