[웹해킹] 웹 어플리케이션 작동원리 Web Application
클라이언트-서버 모델:
사용자가 웹 브라우저(클라이언트)를 통해 서버에 요청을 보내면, 서버는 해당 요청을 처리한 후 그 결과를 클라이언트에 응답한다. 클라이언트 측은 사용자가 상호작용하는 프론트엔드에 해당하며, 서버와의 통신을 통해 웹 페이지를 구성하거나 데이터를 받는다. 서버는 데이터베이스나 비즈니스 로직을 포함하고 백엔드에 해당함. 클라이언트가 요청한 데이터를 처리하거나 반환하는 역할을 한다.
HTTP 메소드
자주 등장하는 HTTP 메소드들을 소개해보자면
GET: 서버에서 데이터를 요청함
POST: 서버에 데이터를 전송하는 메소드로 업로드나 제출에 사용됨
PUT: 서버에 이미 있는 데이터 업데이트
DELETE: 데이터 삭제
프론트엔드와 백엔드
프론트엔드:
프론트엔드는 사용자가 상호작용하는 웹 페이지의 사용자 인터페이스(UI)를 말한다. 이는 주로 HTML, CSS, JavaScript로 구성되며, 사용자가 웹 사이트를 이용할 수 있도록 하는 시각적 요소를 담당한다. HTML은 페이지의 구조를, CSS는 스타일을, JavaScript는 동적인 동작을 담당한다.
백엔드:
백엔드는 사용자가 직접 볼 수 없는 서버 측에서 동작하는 부분으로, 데이터베이스와 서버 로직을 포함한다. 이는 보통 PHP, Python, Node.js 등의 언어로 구현되며, 클라이언트의 요청에 따라 데이터베이스와 통신하거나 필요한 비즈니스 로직을 처리하여 결과를 반환한다.
URL 구조
: 인터넷에서 리소스의 위치를 나타내는 주소로, 웹 페이지에 접근할 수 있는 경로를 제공
1. 프로토콜
: URL의 가장 앞부분은 프로토콜이다. 이 프로토콜은 클라이언트(브라우저)와 서버 간의 통신 방식(규약)을 정의한다.
웹 통신의 표준 프로토콜인 HTTP(HyperText Transfer Protocol)는 데이터를 암호화하지 않고 주고받는 방식으로 동작한다. 반면, HTTPS(HyperText Transfer Protocol Secure)는 보안이 강화된 프로토콜로, SSL/TLS를 사용하여 데이터를 암호화하므로 더 안전함
2. 도메인 example.com
: 도메인은 웹 서버의 위치를 나타낸다. 사용자가 쉽게 기억하고 입력할 수 있도록 IP 주소를 대신해 사용하는 텍스트 주소
www: 일반적으로 웹 페이지를 나타내며 생략할 수도 있다.
example.com: 이 부분이 도메인 이름이다. 각 도메인은 고유하며, 특정 서버를 가리킨다.
3. 포트번호 (:80)
: 서버에서 어떤 서비스를 사용할지 파악할 수 있음. HTTP는 80번 포트 HTTPS는 443번 포트
4. 경로(/blog)
: 서버 내에서 특정 리소스(파일, 페이지 등)의 위치를 가리킨다. 이는 서버 내에서 어떤 파일을 요청할지 명확하게 밝힘
5. 쿼리 파라미터(?query=example)
: 쿼리 스트링은 물음표(?) 뒤에 붙으며, 서버로 전달할 추가적인 데이터를 포함한다. 이는 주로 동적 웹 페이지에서 입력값을 서버로 전달할 때 사용함. key=value의 형태로 데이터를 넘기며, 여러 쿼리 파라미터는 앰퍼샌드(&)로 구분한다.
ex) ?search=books&category=fiction에서 search와 category라는 두 가지 파라미터가 서버로 전달된다.
6. 프래그먼트 Fragment
: 해시(#) 뒤에 붙으며, 주로 웹 페이지 내의 특정 부분으로 이동하기 위해 사용함. 예를 들어, 긴 웹 페이지에서 특정 섹션으로 바로 이동할 때 사용된다.
ex) #section1은 페이지 내에서 id="section1"을 가진 요소로 이동
HTTPS는 TLS와 같은 암호화를 거치기 때문에 평문인 HTTP보다 더 안전하다
HTTP 요청과 응답
HTTP 요청은 클라이언트가 서버에게 특정 작업을 요청할 때 사용하며 다음의 구성요소가 있다.
- HTTP 메소드
- URL
- HTTP 헤더(host, user-Agent, Accept, authorization)
- Request Body
HTTP 응답은 클라이언트 요청에 따라 서버에서 반환하는 결과를 보여준다. 구성요소를 알아보자
- 상태코드(200, 301, 400, 500 etc)
- HTTP 헤더(Content-type, content-length, set-cookie)
- Response Boday
HTTP 요청과 응답의 과정
클라이언트가 서버에 요청을 보냄:
사용자가 웹 브라우저에서 특정 웹 페이지를 요청하면, 브라우저는 서버에 HTTP 요청을 보낸다. 이 요청은 주로 GET 메서드로 이루어지며, 요청 헤더에 브라우저 정보와 URL, 쿠키 등이 포함된다.
서버가 요청을 처리:
서버는 클라이언트의 요청을 수신한 후, 요청에 맞는 리소스나 데이터를 준비한다. 서버가 요청을 처리하는 과정에서 데이터베이스 조회, 비즈니스 로직 처리 등의 작업이 이루어진다.
서버가 응답을 반환:
요청이 성공적으로 처리되면 서버는 상태 코드 200 OK와 함께 요청한 데이터를 응답 바디에 담아 클라이언트에게 반환한다. 만약 오류가 발생했다면, 적절한 오류 코드(예: 404, 500)와 함께 오류 메시지를 전달한다.
클라이언트가 응답을 처리:
클라이언트는 서버의 응답을 받아 웹 페이지를 렌더링하거나, 동적 데이터를 처리하여 화면에 표시한다. 예를 들어, 브라우저는 응답된 HTML, CSS, JavaScript를 해석하여 사용자가 보는 웹 페이지를 완성한다.
DNS(Domain Name System)
DNS(Domain Name System)는 인터넷에서 도메인 이름을 IP 주소로 변환해주는 시스템이다. 간단히 말해, DNS는 사람이 이해하기 쉬운 도메인 이름(예: http://www.example.com) 을 서버가 이해할 수 있는 IP 주소(예: 192.168.1.1)로 변환하는 역할
dns는 다른 포스팅에서 이미 다뤘으므로 생략하겠음
https://eggsmong.tistory.com/65
[LetsDefend] Network Protocols 네트워크 프로토콜 - DNS, Telnet
DNSIP 주소와 호스트명 매칭 및 변환을 담당하는 프로토콜인터넷에서 도메인 이름을 IP 주소로 변환해 주는 프로토콜이다. 웹사이트에 접속할 때, 우리는 보통 사람이 읽기 쉬운 도메인 이름(예: h
eggsmong.tistory.com