
- Web Resource
웹 상에 존재하는 모든 콘텐츠입니다. (HTML, CSS, JS, PDF, PNG 등) - URI (URL)
URI는 Uniform Resource Identifier의 약자로 리소스를 식별하기 위한 식별자입니다. - HTTP (HyperText Transfer Protocol)
인터넷 서비스에서는 서비스 대상 간 통신 규약(Protocol)을 지정하여 통신합니다.
HTTP는 웹을 이용하기 위한 통신 규약입니다. - HTTPS (HyperText Transfer Protocol Secure)
기존 HTTP 데이터를 암호화하여 통신합니다. - Cookie
웹 브라우저에 저장하는 데이터입니다. - Session
서버에 저장하는 데이터입니다. - Domain Name
인터넷(웹) 네트워크상에서 컴퓨터를 식별하는 이름입니다. (e.g. www.naver.com은 네이버의 서버 컴퓨터를 식별하는 이름입니다.) - Server
서버는 인터넷상에서 사용자에게 서비스를 제공하는 컴퓨터입니다.
그 중 웹 서버는 사용자(웹브라우저)와 HTTP를 이용하여 통신하는 서버입니다. - Application
서버에서 설정한 특정 기능들을 수행하는 소프트웨어입니다. - DataBase (DB)
데이터를 저장하기 위해 사용하는 데이터 저장소입니다.
사용자가 웹 브라우저를 통해 보게 되는 페이지를 구성하는 대표적인 웹 리소스들은 다음과 같습니다.
- HTML (Hyper Text Markup Language)
웹 문서의 뼈대를 구축하기 위한 마크업 언어입니다.
정해진 태그와 속성을 지정하여 문서를 구성합니다. - CSS (Cascading Style Sheets)
HTML이 표시되는 방법을 정의하는 스타일 시트 언어입니다.
이미지, 태그, 글자 등 다양한 웹 리소스들의 출력 시 스타일을 설정합니다. - JS (JavaScript)
HTML과 CSS는 화면에 출력되는 뼈대를 그리는 것이며, JS와 같은 Client Side Script를 이용하여 페이지 내에서의 행위들을 설정할 수 있습니다. - Etc
문서, 이미지, 동영상, 폰트 등
아래 그림은 URI를 구성 요소 별로 나눈 그림입니다.
아래는 자주 쓰이는 웹 URI 구성 요소를 설명합니다.
- Scheme
웹 서버에 접속할 때 웹 브라우저가 어떤 체계(프로토콜)를 이용할지에 대한 정보를 담고 있습니다. - 보통 http / https를 사용하고 이 외에도 mailto, tel을 통해 메일 클라이언트나 연락처 프로그램을 열기도 합니다.
- Host
Authority의 일부로써 접속할 웹 서버의 호스트(서버 주소)에 대한 정보를 가지고 있습니다. - 도메인이나 IP Address가 호스트로써 사용될 수 있습니다.
- Port
Authority의 일부로써 접속할 웹 서버의 포트에 대한 정보를 가지고 있습니다. - Path
접속할 웹 서버의 경로에 대한 정보를 가지고 있으며 / 문자로 구분됩니다. - Query
웹 서버에 전달하는 파라미터 (추가적인 정보)이며 URI에서 ? 문자 뒤에 붙습니다. - Fragment
메인 리소스 내에 존재하는 서브 리소스에 접근할 때 이를 식별하기 위한 정보를 담고 있으며 URI에서 # 문자 뒤에 붙습니다. 웹 브라우저만 가지고 있는 데이터입니다. 메인 리소스(페이지) 내에서 서브 리소스를 식별할 때 사용함. - URL Encoding(percent encoding)
- URI 구조내에서 예약어(구분자)로 사용되는 문자들을 전송하고자 할 때 사용합니다. 예약어는 URI 구조내에서 문 법적으로 중요한 의미를 가지고 있기 때문에 문법적으로 사용하지 않을 경우에는 반드시 인코딩해 사용해야 합니다.
- HTML entity Encoding
- HTML 문서 내에서 사용하는 문자열들이 HTML에서 사용하는 태그로 인식하지 않도록 하기 위해 사용합니다.
- HTTP 또는 HTTPS는 URI의 구성 요소 중 Scheme(Protocol)에 해당합니다.
- 프로토콜은 컴퓨터 내부 혹은 컴퓨터 사이에서 어떻게 데이터를 교환할지 정의하는 규칙 체계입니다.
- 즉, https://dreamhack.io URI는 HTTPS 방식으로 dreahack.io 서버와 통신한다는 것을 의미합니다.
HTTP Request
HTTP Request는 서버에 대한 요청을 의미합니다. 사용자와 서버가 서로 통신을 하기 위해서는 서로가 이해할 수 있는 데이터 구조를 전달해야 합니다.
HTTP의 구조에서 각각의 줄은 CRLF로 줄 바꿈이 이루어져야 합니다.
HTTP Request의 구조 중 가장 첫번째 줄에는 사용자가 서버에 요청 시 수행하고자 하는 동작인 Method, 요청하는 웹 리소스의 경로인 Path, 사용하는 HTTP의 버전을 나타내는 Version으로 구성됩니다.
두 번째 줄부터는 Header 부분입니다. Header는 이름: 값 형태로 이루어집니다. Header는 상황에 따라 많은 데이터를 포함할 수 있기 때문에 Header 부분의 끝을 표시하기 위한 CRLF을 한 번 더 출력합니다.
마지막으로 사용자의 데이터를 담는 부분인 Body가 있습니다.
HTTP Response
HTTP Response는 사용자의 요청에 대한 서버의 응답을 의미합니다. Response의 구조도 Request의 구조와 마찬가지로 각 줄은 CRLF로 줄 바꿈이 이루어져야 합니다.
HTTP Response의 구조 중 가장 첫번째 줄에는 Version과 사용자의 요청에 대한 서버의 상태 응답 코드인 Status code로 구성됩니다. 두 번째 줄부터는 Header 부분입니다. Header 부분의 각 줄은 이름: 값의 형태로 이루어집니다. Header의 끝을 표시하기 위해 CRLF를 한 번 더 출력한 후, 서버의 응답 데이터 부분인 Body로 구성됩니다.
Cookie
HTTP는 하나의 Request와 Response의 쌍이 독립적으로 구성되어 통신하는 connectionless, stateless 프로토콜입니다.
Connectionless 속성은 하나의 요청에 하나의 응답을 한 후 네트워크 연결을 끝맺는 것을 의미합니다. 불특정 다수의 사용자에게 서비스되어야 하는 웹의 특성상 계속해서 연결상태를 유지하는 것은 서버 부하로 이너질 가능성이 있어 connectionless를 갖게 되었습니다.
Stateless 속성은 네트워크가 연결이 끝맺을 때 상태를 유지하지 않는 것을 의미합니다. HTTP 요청마다 새로운 커넥션을 열기 때문에 사용자 인증을 계속해서 해야 한다는 단점이 있습니다. 이러한 단점을 개선하기 위해 상태를 유지하기 위한 Cookie가 탄생했습니다.
웹 브라우저는 HTTP Response의 Set-Cookie Header나 Javascript document.cookie를 통해 데이터를 쿠키에 저장합니다.
Session
쿠키에 인증 상태를 포함한 데이터를 저장하면 사용자가 임의 사용자로 인증된 것 처럼 요청을 조작할 수 있습니다. 따라서 서버에 데이터를 저장하기 위해 Session(세션)을 사용합니다. 세션을 활용하면 데이터를 서버에 저장하고 해당 데이터에 접근할 수 있는 유추할 수 없는 랜덤한 문자열 키를 만들어 응답하며, 이를 보통 Session ID라고 부릅니다. 브라우저는 해당 키를 쿠키에 저장하고 이후에 HTTP 요청을 보내면 서버에서 키에 해당하는 데이터를 가져와 인증 상태를 확인합니다.
쿠키는 데이터 자체를 사용자가 저장하며, 세션은 서버가 저장한다는 핵심적인 차이가 있습니다. 오른쪽 탭에 있는 모듈을 활용해 서버의 세션 저장소에 admin 인증 정보를 담고 있는 키를 갖고와 value 에 넣어봅니다.
HTTP는 모든 데이터를 암호화 되지 않은 평문으로 전송합니다. 네트워크에서 전송된 데이터를 감청할 수 있다면 HTTP로 통신하는 데이터는 평문으로 노출되고 웹에서 민감한 정보를 다룰 때 문제가 될 수 있습니다.
HTTPS는 Transport Layer Security(TLS), Secure Sockets Layer(SSL)를 사용해서 암호화합니다. 공개키 암호화를 사용해서 클라이언트와 서버가 키를 교환하기 때문에 비교적 안전합니다.
IP addresses는 네트워크상에서 통신이 이루어질 때 장치를 식별하기 위해 사용되는 주소입니다. 불규칙한 숫자로 이루어진 IP Address를 사람이 외우기 쉽고, 의미를 부여하기 위해 Domain Name을 사용합니다.
Domain Name을 이용해 Host를 조회할 때는 Domain Name과 IP address 정보를 매핑해 저장하는 Domain Name Server(DNS)에서 조회해 등록된 IP Address를 가져와 사용합니다. 웹 브라우저에서 http://example.com/ 주소로 접속할 경우 DNS에서 example.com(Domain Name)의 IP와 통신합니다.
Web Server : 웹 서버는 사용자의 HTTP 요청을 해석하여 처리한 후 응답하여 주는 역할을 합니다.
Web Application : 웹 어플리케이션은 사용자의 요청을 동적으로 처리할 수 있도록 만들어진 어플리케이션입니다.
DataBase Management System(DBMS) : 데이터베ㅣㅇ스 내의 데이터 조회/수정/삽입을 용이하게 할 수 있도록 도와주는 서버 어플리케이션입니다. MySQL, MS-SQL 등을 DBMS라 하며 해당 어플리케이션들이 관리하는 데이터를 데이터베이스라고 합니다. 데이터베이스에는 사용자의 인증, 상품, 문서 등 중요한 개인 정보가 포함된 여러 가지 내용이 존재하기 때문에 보안에 각별히 신경써야 합니다.
< 총 정리 >
웹과 브라우저
- 웹을 사용하기 위해 웹 브라우저를 사용합니다.
- HTML은 웹 문서의 뼈대를 구축하기 위한 마크업 언어입니다.
- CSS는 이미지, 태그, 글자 등 다양한 웹 리소스들의 스타일을 지정합니다.
- Javascript는 동적으로 HTTP 요청을 주고 받고 사용자가 보고 있는 페이지를 컨트롤 할 수 있는 스크립트 언어입니다.
- URI는 Uniform Resource Identifier의 약자로 리소스를 식별하기 위한 식별자입니다.
HTTP
- 기본 HTTP 포트 번호는 80이고 HTTPS 포트 번호는 443입니다.
- HTTP 헤더는 서버에 추가 정보를 전달하는 데이터 부분입니다. 사용자가 입력한 데이터를 전달하기 위한 부분보다는 사용자와 서버가 상호작용하기 위한 정보를 담는 부분으로 사용됩니다.
- 쿠키는 웹 브라우저에 저장되고 세션은 서버에 저장됩니다.
웹 서버 어플리케이션
- 웹 서버는 사용자의 HTTP 요청을 해석하여 처리한 후 응답하여 주는 역할을 합니다.
- 웹 어플리케이션은 사용자의 요청을 동적으로 처리할 수 있도록 만들어진 프로그램입니다.
- DBMS는 데이터를 저장하기 위해 사용하는 데이터 저장소 관리 프로그램입니다.
웹 해킹
- 웹 해킹을 포함한 다양한 분야에서의 해킹은 본래의 의도와는 다른 행위를 발생시키는 것을 의미합니다.
HTTP 요청의 시작 줄은 메소드(Method), 요청 URI(Request-URI), 그리고 HTTP 버전으로 구성됩니다. 각각은 띄어쓰기로 구분합니다.
메소드는 URI가 가리키는 리소스를 대상으로, 서버가 수행하길 바라는 동작을 나타냅니다. HTTP 표준에 정의된 메소드는 8개가 있으나, 여기서는 비교적 자주 사용되는 GET과 POST 메소드만 설명하겠습니다.
먼저 GET은 리소스를 가져오라는 메소드입니다. 이용자가 브라우저에 웹 서버의 주소를 입력하거나 하이퍼링크를 클릭하면, 새로운 페이지를 렌더링하기 위해 리소스가 필요합니다. 이때 브라우저는 GET 요청을 서버에 전송하여 리소스를 받아옵니다. 반대로, POST는 리소스로 데이터를 보내라는 메소드입니다. 전송할 데이터는 보통 HTTP 바디에 포함됩니다. 로그인할 때 입력하는 ID와 비밀번호, 게시판에 작성하는 글 등이 POST로 서버에 보내집니다.
이 외에 요청 URI는 메소드의 대상을, HTTP 버전은 클라이언트가 사용하는 HTTP 프로토콜의 버전을 나타냅니다.
HTTP 응답의 시작 줄은 HTTP 버전, 상태 코드(Status Code), 그리고 처리 사유(Reason Phrase)로 구성됩니다. 각각은 띄어쓰기로 구분됩니다.
HTTP 버전은 서버에서 사용하는 HTTP 프로토콜의 버전을 나타냅니다. 그리고 상태 코드는 요청에 대한 처리 결과를 세 자릿수로 나타냅니다. HTTP 표준인 RFC 2616은 대략 40여개의 상태 코드를 정의하고 있는데, 각각은 첫 번째 자릿수에 따라 5개의 클래스로 분류됩니다. 처리 사유는 상태 코드가 발생한 이유를 짧게 기술한 것입니다.
HTTP(HyperText Transfer Protocol): 웹 서버와 클라이언트가 리소스를 교환하기 위해 사용하는 프로토콜. 클라이언트가 요청하면, 서버가 응답하는 방식.
HTTP 메시지: HTTP 서버와 클라이언트가 교환하는 데이터. 헤드와 바디로 구성되며, 각 줄은 CRLF로 구분됨.
- 헤드: 메시지에 대한 정보. 헤드의 끝에는 CRLF가 한 줄 있음.
- 바디: 클라이언트가 서버에게, 또는 서버가 클라이언트에게 전달할 데이터
HTTP 요청(Request): 클라이언트가 서버에게 특정 동작을 요청하는 메시지
- 메소드(Method): 요청 URI가 가리키는 리소스에 대해, 서버가 수행했으면 하는 동작을 지정
- 요청 URI(Request-URI): 메소드의 대상이 되는 리소스를 지정
HTTP 응답(Response): 요청을 처리한 결과 및 이유, 그리고 클라이언트에 전송할 웹 리소스를 포함하는 메시지
- 상태 코드(Status Code): 요청을 처리한 결과
- 처리 사유(Reason Phrase): 상태 코드가 발생한 이유
- HTTPS(HTTP on Secure socket layer): TLS를 이용하여 HTTP의 약점을 보완한 프로토콜
통신: 정보를 전하는 것. 현대에는 전화, 인터넷 등의 통신 수단을 이용하여 과거보다 시간과 공간의 제약을 받지 않고 이뤄짐.웹: 인터넷이라는 통신망을 활용하여 구현된 전 지구적 정보 공간
웹 클라이언트: 웹에서 정보를 요구하는 주체
웹 서버: 웹에서 정보를 제공하는 주체
웹 리소스: 웹 서버가 제공하는 정보 자원(e.g. HTML, Javascript, CSS 등)
웹 서비스: 웹 상에서 제공되는 서비스 (e.g. SNS, 온라인 쇼핑몰 등)
'무작정 해킹 공부 > Web Hacking' 카테고리의 다른 글
Cross Site Scripting(XSS) (0) | 2025.02.03 |
---|---|
CURL 사용법 (1) | 2025.02.02 |
Same Origin Policy (0) | 2022.08.20 |
Cookie & Session (2) | 2022.07.25 |
웹 브라우저편 (0) | 2022.07.22 |
로딩중.....(버퍼링)
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!