[Dreamhack] Web Hacking STAGE 2
STAGE 2: Background - Web
웹 기본 상식
> Background : HTTP/HTTPS
인코딩
: 0과 1로 우리의 문자를 표현하는 것
- 아스키(Ascii) : 7bit 데이터에 대한 인코딩 표준
⋅ ex | '1000001' -> 'A'
⋅ 영어는 아스키, 한글은 CP-949, EUC-KR 등을 사용
⋅ 호환성 측면에서 국제 sw개발 회사에 큰 부담
- 유니코드(Unicode) : 인코딩의 호환성 측면의 한계를 해결하기 위해 모든 언어의 문자를 하나의 표준에 담기 위한 표준
⋅ 한 문자는 최대 32bit로 표현 -> 표현 가능한 정보의 가짓수 2^32 (대략 42억개)
⋅ 한글, 한자, 히라가나, 가타카나, 알파벳 뿐 아니라 이모지도 이에 포함
통신 프로토콜
클라이언트 : 요청 <-------> 서버 : 응답
- 프로토콜(Protocol) : 규격화된 상호작용에 적용되는 약속
⋅ ex | TCP/IP, HTTP, FTP
HTTP : Hyper Text Transfer Protocol
: 서버와 클라이언트의 데이터 교환을 요청과 응답 형식으로 정의한 프로토콜
- 기본 메커니즘 : 클라이언트가 서버에게 요청하면, 서버가 응답하는 것
- 클라이언트가 서비스 포트(웹 서버가 프로토콜 서버를 대기시키는 곳, ex | TCP/80 or TCP/8080)에 HTTP요청을 전송하면, 이를 해석하여 적절한 응답을 반환한다.
+ ) 네트워크 포트와 서비스 포트
- 포트 : 클라이언트가 서버의 포트에 접근하여 데이터를 내려놓고, 서버가 클라이언트에 보낼 데이터를 실어서 돌려보내는 것
- 네트워크 포트 : 네트워크에서 서버와 클라이언트가 정보를 교환하는 추상화된 장소
- 서비스 포트 : 네트워크 포트중에서 특정 서비스가 점유하고 있는 포트
⋅ ex | HTTP가 80번 포트를 점유하고 있다면 HTTP의 서비스 포트는 80번 포트가 된다.
- 포트로 데이터를 교환하는 방식은 전송 계층의 프로토콜을 따른다.
⋅ TCP : 패킷의 흐름을 관리하고, 데이터가 정확하게 전달되었는지 확인학는 프로토콜
⋅ UDP : 전송이 시작될 때, 송/수신 시스템간의 연결을 시도하지 않는 프로토콜
HTTP 메시지
: 클라이언트가 전송하는 HTTP요청, 서버가 반환하는 HTTP 응답이 있다.
- HTTP 헤드
: 각 줄은 CRLF로 구분되며 첫 줄은 시작줄, 나머지 줄은 헤더라고 부른다. 헤드의 끝은 CRLF 한 줄로 나타낸다.
⋅ 필드와 값으로 구성되며 HTTP 메시지 또는 바디의 속성을 나타낸다. 하나의 HTTP 메시지에는 0개 이상의 헤더가 있을 수 있다.
- HTTP 바디
: 헤드의 끝을 나타내는 CRLF 뒤, 모든 줄을 말한다. 클라이언트나 서버에게 전송하려는 데이터가 바디에 담긴다.
HTTP 요청
: 서버에게 특정 동작을 요구하는 메시지, 서버는 해당 동작이 실현 가능한 지, 클라이언트가 그러한 동작을 요청할 권한이 있는지 등을 검토하고, 적절할 때만 이를 처리한다.
- 시작 줄 : HTTP 요청의 시작 줄은 메소드, 요청 URI, 그리고 HTTP 버전으로 구성된다. 각각은 띄어쓰기로 구분한다.
⋅ 메소드 : URI가 가리키는 리소스를 대상으로, 서버가 수행하길 바라는 동작
⋅ GET : 리소스를 가져오라는 메소드
→ 이용자가 브라우저에 웹 서버의 주소를 입력하거나 하이퍼링크를 클릭하면, 새로운 페이지를 렌더링하기 위해 리소스 가 필요한다. 이때 브라우저는 GET 요청을 서버에 전송하여 리소스를 받아온다.
⋅ POST : 리소스로 데이터를 보내라는 메소드
→ 전송할 데이터는 보통 HTTP 바디에 포함된다. 로그인할 때 입력하는 ID와 비밀번호, 게시판에 작성하는 글 등이 POST로 서버에 보내진다.
HTTP 응답
: HTTP 요청에 대한 결과를 반환하는 메시지
⋅ 요청을 수행했는지, 하지 않았는지, 안했다면 이유는 무엇인지와 같은 상태 정보, 그리고 클라이언트에게 전송할 리소스가 응답에 포함된다.
- 시작 줄 : HTTP 응답의 시작줄은 HTTP버전, 상태코드, 그리고 처리 사유로 구성, 각각은 띄어쓰기로 구분
⋅ HTTP 버전 : 서버에서 사용하는 HTTP 프로토콜의 버전
⋅ 상태코드 : 요청에 대한 처리 결과를 세 자릿수로 나타냄
⋅ 처리 사유 : 상태 코드가 발생한 이유를 짧게 기술한 것
→ 200 상태코드를 갖는 응답
HTTP Request & Response
: 원하는 메소드를 선택하여 요청을 전송하면, 오른쪽에서 전송된 요청 및 응답의 구조를 확인할 수 있다.
HTTPS (HTTP over Secure socket layer)
: TLS(Transport Layer Security) 프로토콜을 도입하여 평문으로 전달되는 HTTP 응답과 요청을 가로채지 못하도록 함
⋅ TLS : 서버와 클라이언트 사이에 오가는 모든 HTTP 메시지를 암호화, 공격자가 중간에 메시지를 탈취하더라도 이를 해석 하는 것은 불가능하며 결과적으로 HTTP 통신이 도청과 변조로부터 보호된다.