소소한 개발 공부

[Web] 웹 기초 지식 정리 본문

카테고리 없음

[Web] 웹 기초 지식 정리

이내내 2021. 6. 1. 21:03
📝 드림핵 [Introduction of Webhacking]  을 보고 공부하며 작성한 글입니다.
링크 : [Introduction of Webhacking]

Web Browser (웹 브라우저)

웹에 접속하기 위해 사용하는 소프트웨어. 서버-클라이언트에서 클라이언트 역할.

Web Resource

웹 상에 존재하는 모든 콘텐츠 (HTML, CSS, JS, PDF, PNG 등)

URI (URL)

Uniform Resource Identifier의 약자로 리소스를 식별하기 위한 식별자.
URL : 리소스를 가리키는 주소.

URI 구성요소

  • Scheme :웹 서버에 접속할 때 어떤 체계(프로토콜)를 이용할지에 대한 정보를 담는다.
  • Host : Authority의 일부로서 접속할 웹 서버의 호스트(서버 주소)에 대한 정보를 가진다.
  • Port : Authority의 일부로서 접속할 웹 서버의 포트에 대한 정보를 가진다.
  • Path : 접속할 웹 서버의 경로에 대한 정보를 가지고 있으며 '/' 문자로 구분한다.
  • Query : 웹 서버에 전달하는 파라미터이며 URI에서 '?' 문자 뒤에 붙는다.
  • Fragment : 메인 리소스 내에 존재하는 서브 리소스에 접근할 때 이를 식별하기 위한 정보를 담음. URI에서 '#' 문자 뒤에 붙는다.

HTTP (HyperText Transfer Protocol)

인터넷 서비스에서 서비스 대상 간 통신 규약(Protocol)을 지정해 통신하는데 이 HTTP는 웹을 이용하기 위한 통신 규약.
URI의 구성요소 중 Scheme(Protocol)에 해당하며 웹에서 이루어지는 통신을 정의한 프로토콜.
TCP 혹은 TLS(암호화된 TCP)를 사용해 통신하고 포트는 80(HTTP), 443(HTTPS)를 사용한다.
HTTP는 사용자가 서버에 요청을 하는 Request와 사용자의 요청에 대한 서버의 응답인 Response로 나뉜다.
하나의 Request와 Response의 쌍이 독립적으로 구성되어 통신하는 connectionless, stateless 프로토콜이다.

  • connectionless : 하나의 요청에 하나의 응답을 한 후 네트워크 연결을 끝냄
  • stateless : 네트워크가 연결을 끝맺을 때 상태를 유지하지 않음

HTTPS (HyperText Transfer Protocol Secure)

기존 HTTP 데이터를 암호화해 통신. TLS(Transport Layer Security), SSL(Secure Socket Layers)를 사용해 암호화. 공개키 암호화를 사용해 클라이언트와 서버가 키를 교환하기 때문에 비교적 안전하다.

HTTP Request

서버에 대한 요청.
Method(사용자가 서버에 요청 시 수행하고자 하는 동작), Path(요청하는 웹 리소스 경로), Version(사용하는 HTTP의 버전), Header(서버에 추가 정보를 전달하는 데이터 부분), Body(사용자가 입력한 데이터가 서버에 전달 시 데이터를 담는 부분) 으로 구성.
각 문장은 CRLF(=\r\n)로 줄 바꿈이 이뤄져야 한다.

Method 의 종류
  • OPTIONS : 요청하는 리소스가 허용하는 메소드 목록을 반환
  • GET : 리소스를 요청. ex)게시물/프로필 보기, 이미지 등
  • Head : GET 메소드와 동일하지만 Response의 Body 부분은 받지 않고, Header만 받음. ex) 서버의 상태 확인 등
  • POST : 특정 리소스 생성 및 데이터 추가를 위해 값을 제출할 때 사용. ex) 게시물/프로필 생성 등
  • PUT : 특정 리소스의 내용을 보낸 값으로 설정 ex) 업데이트 등
  • PATCH : 특정 리소스의 내용 중 보낸 값의 key 만 변경. ex) 게시글 업데이트 등
  • DELETE : 특정 리소스를 삭제 TRACE : 요청받은 값을 Response의 Body로 다시 클라이언트에게 되돌려 줌.
Header 요소
  • Host : 데이터를 보내는 서버의 주소
  • Cookie : 사용자를 식별하기 위해 사용하는 정보
  • User-Agent : 사용자가 사용하는 프로그램의 정보
  • Referer : 페이지 이동 시 이전 URI의 정보
  • Content-Type : 사용자가 전달하는 데이터의 처리 방식과 형식을 나타냄. 사용자와 서버 간의 데이터 처리 방식이 일치되어야 정상적으로 데이터 통신이 이뤄짐.

HTTP Response

사용자의 요청에 대한 서버의 응답.
Version, Status Code(사용자의 요청에 대한 서버의 응답 코드, 처리 결과), Header, Body로 구성.
각 문장은 CRLF로 줄 바꿈이 이뤄져야 한다.

  • Status Code :
  • 200번 영역(사용자의 요청에 대한 서버의 처리 성공, 200:OK, 201:Created),
  • 300번 영역(사용자가 요청한 리소스가 다른 경로로 변경된 경우, Response Header에 포함되어 있는 Location 헤더의 값으로 리다이렉션함.)
    301:Moved Permanently, 302:Found),
  • 400번 영역(사용자가 서버에 요청하는 구조 또는 데이터가 잘못되었음.)
    400:Bad Request(데이터 또는 구조의 잘못된 문법으로 서버가 요청을 이해할 수 없음),
    403:Forbidden(사용자가 해당 웹 리소스에 접근할 권리X),
    404:Not Found(사용자가 요청한 웹 리소스의 경로에 대해 응답할 데이터X),
    405:Method Not Allowed(사용자가 요청한 Method가 서버에서는 허용되지 않는 Method임)
  • 500번 영역(서버의 에러와 관련.
    500:Internal Server Error(서버에 에러 발생),
    503:Service Unavailable(서버가 사용자의 요청을 처리할 준비가 되지 않았음.)
  • Header 요소 :
    Content-Type : 서버의 응답 데이터를 웹 브라우저에서 처리할 방식
    Content-Length : 서버가 응답하는 데이터의 길이
    Server : 서버가 사용하는 소프트웨어 정보
    Allow : 허용되는 Method 목록
    Location : 300번 영역의 응답 코드 사용시 변경된 웹 리소스의 주소
    Set-Cookie : 사용자에게 쿠키 발급 시 사용. 해당 헤더를 받은 웹 브라우저는 해당 쿠키를 저장

Cookie

웹 브라우저에 저장하는 데이터
HTTP의 connectionless, stateless 속성은 HTTP가 요청마다 새로운 연결을 열어 사용자 인증을 받아야 한다는 단점이 있는데 Cookie가 이를 개선한다.
HTTP Response의 Set-Cookie Header나 Javascript document.cookie를 통해 데이터를 쿠키에 저장.

Session

서버에 저장하는 데이터
쿠키에 인증상태를 포함한 데이터를 저장하면 수상한 사람이 인증된 쿠키를 사용해 요청을 조작할 수 있다. 따라서 서버에 데이터를 저장.
세션을 활용하면 서버가 데이터에 접근할 수 있는 유추할 수 없는 랜덤한 문자열 키(Session ID)를 만들어 클라이언트에 응답한다.
브라우저는 해당 키를 쿠키에 저장하고 이후에 HTTP에 요청을 보내면 서버에서 키에 해당하는 데이터를 가져와 인증상태를 확인한다.

Domain Name(도메인)

인터넷(웹) 네트워크 상에서 컴퓨터를 식별하는 이름.
네트워크 상에서 통신이 이루어질 때 장치를 식별하기 위해 사용하는 주소를 IP 주소(Internet Protocol)라고 하는데 이는 불규칙한 숫자로 이루어져 있어 사람이 외우기 어려움 => 사람이 외우기 쉽고 의미를 부여해 사용할 수 있게 한 것이 도메인.
도메인은 DNS(Domain Name Server)에 저장되어 있음.(도메인과 IP 주소를 매핑해 DNS에 저장)
따라서 도메인을 이용해 Host를 조회할 때는 DNS에서 조회해서 IP 주소를 가져와 사용한다.

Server

인터넷 상에서 사용자에게 서비스를 제공하는 컴퓨터

  • Web Server
    사용자의 HTTP 요청을 해석해 처리한 후 응답하는 역할. ex) nginx, Apache, Tomcat, IIS 등
    웹서버는 요청을 자체적으로 처리할지, 알맞은 내부 서비스로 연결해 처리할 지 정할 수 있다.
    ex) html문서 요청은 웹서버의 해당 경로의 html문서를 반환. php 요청에는 php 연진을 통해 해당 요청 처리 등

Application

서버에서 설정한 특정 기능들을 수행하는 소프트웨어

  • Web Application
    사용자의 요청을 동적으로 처리할 수 있도록 만들어진 기능.
    Web Application 언어로 작성되며 대표적으로 PHP, NodeJS, Python, JAVA 등이 있음.
    서버에서 동작하므로 웹 어플리케이션 구현체에서 취약점이 발생하게 되면 서버에 직접적인 영향을 끼치게 된다.

DataBase (DB)

데이터를 저장하기 위해 사용하는 데이터 저장소

  • DataBase Management System(DBMS)
    데이터베이스 내의 데이터 조회/수정/삽입을 도와주는 서버 어플리케이션. ex) MySQL, MS-SQL
    SQL Query를 통해 제어하며 이때 사용자의 입력 값을 SQL Query에 필터링 없이 사용하게 되면 SQL Injection 공격에 노출된다.

Encoding(인코딩)

문자 또는 기호 등의 정보, 형태를 표준화, 보안 등의 목적으로 다른 형태나 형식으로 변환하는 처리 혹은 그 처리 방식
웹에서는 대표적으로 URL(%), HTML Entity(&)가 있음

  • Decoding(디코딩)
    인코딩 형태를 원래 형태로 변경하는 것
  • Encoding(인코딩) : 알고리즘이 모두 공개되어 있고 키와 같은 요소가 포함되어 있지 않아서 모두가 원래의 정보로 복원 가능
  • Encryption(인크립션) : 양방향 암호 알고리즘. 일치한 알고리즘과 유효한 키를 가지고 있다면 원래의 정보로 복원 가능

웹 해킹

웹에서 본래의 의도와는 다른 동작을 일으키거나 주어진 권한 이상으로 정보를 열람, 복제, 변경 가능한 행위가 발생하는 것.

웹 해킹 공격 벡터

웹 해킹을 할 때에 공격 대상은 다음과 같이 나누어 볼 수 있다. 공격 대상에 따라 공격 방식, 형태가 달라지며 공격을 통해 가능한 행위가 달라진다.

  • Client-side Attack
    서비스 사용자에 대한 공격.
    웹 서버가 제공해주는 데이터가 공격자에 의해 변조되었을 경우, 웹 서버를 이용하는 웹 브라우저에서 정보를 렌더되는 과정에서 취약점이 발생한다. 이때 공격자가 피격 대상의 웹 브라우저에서 원하는 행위를 수행할 수 있게 되는 상황.
  • Server-side Attack
    서비스를 운용하는 서버에 대한 공격.
    다양한 공격 형태가 존재하며 운영되는 서비스의 구조와 특징에 따라 위협의 형태가 다름.