웹해킹(1) - 기초
웹 클라이언트와 서버의 통신
-> 웹 클라이언트와 서버의 통신 과정을 접속자 입장에서 보기
- 접속자 입장에서 보면 클라이언트와 브라우저를 다른 존재로 취급해야 한다.
- (클라이언트) 이용자가 브라우저를 통하여 웹 서버에 접속한다.(웹리소스 : GET/HTTP/1.1)로 HTTP Request를 보냄
- (클라이언트) 브라우저는 이용자의 요청을 해석하여 HTTP 형식으로 웹 서버( : NGINX)에 리소스를 요청한다.
- (서버 : gunicorn ) HTTP로 전달된 이용자의 요청을 해석한다.
- (서버 : Flask, DBMS) 해석한 이용자의 요청에 따라 적절한 동작을 합니다. 리소스를 요청하는 것이라면, 이를 탐색한다. 계좌 송금, 입금과 같은 복잡한 동작을 요구할 경우 내부적으로 필요한 연산을 처리한다.
- (서버 : Flask -> gunicorn -> NGNIX -> 브라우저) 이용자에게 전달할 리소스를 HTTP 형식으로 이용자에게 전달합니다
- (클라이언트) 브라우저는 서버에게 응답받은 HTML, CSS, JS 등의 웹 리소스를 시각화하여 이용자에게 보여준다.
인코딩
아스키
7비트 데이터에 대한 인코딩 표준 = 2의 7승개만큼 표현 가능
알파벳과 특수 문자 등을 표현할 수 있음
0에서 127까지의 숫자를 이용하여 문자를 표현함
유니코드
유니코드에서 한 문자는 최대 32개의 비트로 표현됨
한글, 한자, 히라가나, 가타카나, 알파벳과 같은 문자 외에 각종 이모지(Emoji)를 표현할 수 있다.
📃 통신 프로토콜(일종의 규칙)
통신 과정
1. 클라이언트는 웹에게 특정 리소스를 지정하여 제공해달라고 요청함(Request)
2. 서버가 해당 요청을 이해함
3. 서버는 대응되는 동작을 통해 클라이언트에게 리소스를 반환(Respond)
- 각 통신 주체가 교환하는 데이터(이하 메시지 = 패킷)를 명확히 해석할 수 있도록 문법(syntax)을 포함한다.
패킷
요청 패킷(HTTP Request)
요청 패킷 구성 요소
GET : HTTP Method
Method- URI가 가리키는 리소스- 서버가 수행하길 바라는 동작GET - 리소스를 가져오라는 메소드- 브라우저는 GET 요청을 서버에 전송하여 리소스를 받아온다.- 하이퍼링크나 웹 서버 주소를 입력했을 때 렌더링하는 페이지 정보들 가져오기
POST- 리소스로 데이터를 보내라는 메소드- 로그인할 때 입력하는 ID와 비밀번호, 게시판에 작성하는 글 등이 POST로 서버로 보내짐- 전송할 데이터는 보통 HTTP 바디에 포함됨
ㅈ
/index.html : Request URI
- 메소드의 대상
HTTP/1.1 : HTTP 버전
- 클라이언트가 사용하는 HTTP 프로토콜의 버전
나머지 : Request Header
응답 패킷 (HTTP Response)
응답 패킷 구성 요소HTTP/1.1 : HTTP 버전200 OK : 리턴 코드- 요청에 대한 처리 결과를 세 자릿수로 나타낸다.
연주황색 코드 : Response Header초록색 : Response Body
HTTP 패킷 구조 설명 HTTP 헤드
- HTTP 헤드의 각 줄은 CRLF로 구분되며, 첫 줄은 시작 줄(Start-line), 나머지 줄은 헤더(Header)라고 한다.
헤드의 끝은 CRLF 한 줄로 나타낸다.
- 헤더는 필드와 값으로 구성된다.
- HTTP 메시지 또는 바디의 속성을 나타낸다.
- 하나의 HTTP 메시지에는 0개 이상의 헤더가 있을 수 있다.
HTTP 바디
- 헤드의 끝을 나타내는 CRLF 뒤, 모든 줄을 일컬음
- 클라이언트나 서버에게 전송하려는 데이터가 바디에 담긴다.
프로토콜 종류
-TCP/IP : 네트워크 통신의 기본
- HTTP : 웹 어플리케이션이 주고 받는 통신 규칙
- FTP : 파일을 주고 받을 때 사용함
-> 자세한 것은 네트워크를 따로 블로그에서 다루도록 하겠다.
네트워크 포트(Network Port)
- 네트워크에서 서버와 클라이언트가 정보를 교환하는 장소
- 그냥 포트라고도 부름
- 클라이언트가 서버에 보낼 데이터를 받고, 서버도 클라이언트에 보낼 데이터를 받는 장소
서비스 포트(Service Port)
- 네트워크 포트 중에서 특정 서비스가 점유하고 있는 포트
- HTTP가 80번 포트를 점유하고 있다면 HTTP의 서비스 포트는 80번 포트가 된다.
포트로 데이터를 교환하는 방식(네트워크)의 규칙은 전송 계층의 프로토콜을 따른다.(Transport Layer)
전송 계층 프로토콜 종류
TCP
UDP
TCP로 데이터를 전송하려는 서비스에 UDP 클라이언트가 접근하면, 데이터가 교환되지 않는다.
UDP로 데이터를 전송하려는 서비스에 TCP 클라이언트가 접근하면, 데이터가 교환되지 않는다.
-> TCP 클라이언트와 UDP 클라이언트를 구분하기 위해서는?
-서비스 포트를 표기할 때는 서비스가 사용하는 전송 계층 프로토콜(TCP/80, UDP/80)을 같이 표기함
ex) HTTP의 서비스 포트가 TCP/80 이라고 하면, HTTP 서비스를 80번 포트에서 TCP로 제공
-> 포트의 개수는 누가 정하는가?
운영체제가 정함. 현대의 윈도우나 리눅스, 맥 운영체제는 0번 부터 65535번까지, 총 65536개의 같은 수의 네트워크 포트를 사용한다.
-> 이 많은 포트를 모두 다 사용하는가?
- 그렇지 않음. 포트 중 0번부터 1023번 포트는 잘 알려진 포트(Well-known port) 또는 특권 포트(Privileged port)라고 하여, 문자 그대로 각 포트 번호에 유명한 서비스가 등록되어 있고 우리는 그 포트들을 대부분 주로 사용한다.
- 22번 포트에는 SSH, 80에는 HTTP, 443에는 HTTPS가 할당되어 있음
- 잘 알려진 포트에 서비스를 실행하려면 관리자 권한이 필요함
HTTPS
- HTTPS(HTTP over Secure socket layer)는 TLS(Transport Layer Security) 프로토콜을 도입하여 POST 탈취 문제(로그인할 때 전송한 POST 요청에는 대개 이용자의 ID와 비밀번호를 중간에서 가로채는 것)의 문제점을 해결하기 위해 만들어짐
- TLS는 서버와 클라이언트 사이에 오가는 모든 HTTP 메시지를 암호화함
- 공개 키와 대칭 키 암호를 기반으로 한다.
와이어샤크로 웹서버와 웹 클라이언트 사이에서 오가는 메세지 확인 시
HTTP
HTTPS
웹 브라우저 통신 과정
이용자가 example.io를 입력했을 때 웹 브라우저가 하게 되는 기본적인 동작 과정
1. 웹 브라우저의 주소창에 입력된 주소(example.io)를 해석 (URL 분석)
2.dns를 통해 example.io에 해당하는 주소를 탐색함
3.HTTP를 통해 example.io에 요청
4. example.io의 HTTP 응답을 수신함
5.리소스 다운로드 및 웹 렌더링 (HTML, CSS, Javascript)
URL
- 웹에 있는 리소스의 위치를 표현하는 문자열
-