Skip to content

Latest commit

 

History

History
145 lines (129 loc) · 7.13 KB

Web&&HTTP.md

File metadata and controls

145 lines (129 loc) · 7.13 KB

웹 아키텍쳐

  • 3 계층 구조(티어) - 프레젠테이션, 로직, 데이터 티어로 구성되어 있다.
  • Client / Server 영역으로 구분 가능
  • Client
    • 프레젠테이션 티어
  • Server
    • 로직 티어
    • 웹서버와 웹 프레임 워크를 포함한다.
    • 클라이언트로부터 전송된 HTTP 요청을 처리 후, 필요에 따라 데이터 티어와 통신한다.
      • 데이터 티어로부터 반환된 데이터를 가공하여 최종적으로 클라이언트에게 전달
    • 웹 서버로는 IIS, Apache, NGIX 등이 있음
    • 웹 프레임 워크에는 ASP.NET, Spring, Django 등이 있음
    • 데이터 티어
    • DBMS와 Database로 이루어진다.
    • 로직 티어로부터 들어오는 요청(SQL 쿼리문 등)을 처리 및 반환

HTTP(Hyper Text Transfer Protocol)

  • 웹을 구현하기 위한 네트워크 프로토콜
  • HTTP 통신은 요청과 응답으로 구성된다.

HTTP 요청 메시지

<메소드><요청 URI><버전>
<헤더>
<바디>
  • 데이터 전송이 필요하지 않으면 바디 없이 첫 줄과 헤더만으로 메시지 구성 가능
  • Method
    • 서버에게 어떤 명령을 실행하맂 알려주는 역할을 한다.
    • Method 종류
      • GET
        • 지정된 리소스를 요청하는 메소드
        • 웹 페이지나 각종 이미지 파일들의 내용을 가져올 때 사용
      • POST
        • 클라이언트 쪽에서 데이터를 서버 쪽으로 전달할 때 사용하는 메소드
        • 특정한 데이터를 전달할 때 사용
    • 과거에는 GET과 POST 메소드 위주로 구현되었지만, 요즘은 REST API 구현을 위해 PUT과 DELETE 메소드도 많이 사용한다.
    • CRUD HTTP : 데이터 관리를 위해 사용 되는 GET, POST, PUT, DELETE
      • SQL 명령어와도 완벽하게 짝지을 수 있음
  • 요청 URI
    • 특정 리소스의 위치를 프로토콜과 호스트명을 모두 표기하거나, 상대 경로로도 표시할 수 있음
    • 요청의 경우 ?가 사용되어 요청 URI가 구성될 수 있다.
      • ? 뒤의 부분을 쿼리 스트링이라고 한다.
      • &를 이용하여 각 파라미터를 구분할 수 있다.
  • 버전
    • 요청 메시지가 사용하고 있는 HTTP 버전을 표기한다.
    • 응답 메세지에도 버전이 표기함
      • 이를 통해 클라이언트와 서버가 서로 프로토콜 버전을 확인할 수 있음
요청 헤더
  • 헤더는 종류에 따라 요청 메시지와 응답 메시지를 선택적으로 상요할 수 있음

  • 헤더는 리스트의 형태로 여러 개가 전송 될 수 있음

      헤더이름: 헤더 값
    
  • 헤더 값은 헤더에 따라 형식이 조금 달라질 수 있음

  • HOST 헤더

    • 서버의 도메인 이름과 포트를 명시한다
    • 포트 번호는 생략될 수 있음
      • 일반적으로 웹 서비스에서는 80번 포트를 사용한다.
  • User-Agent 헤더

    • 클라이언트 소프트웨어를 식별할 수 있는 헤더
      • 웹 브라우저의 이름과 버전 또는 실행 중인 시스템의 환경, 브라우저가 사용하는 플랫폼 정보 등이
    • User-agent 정보를 이용해 클라이언트의 환경에 따라 서버 동작을 바꿀 수 있음
      • 이를 이용한 공격을 User-agent spoofing이라 함
  • Accept, Accept-Language, Accept-Encoding

    • Accept 헤더는 클라이언트가 어떤 컨텐츠 타입을 처리할 수 있는지 서버에게 알려준다.
    • Accept-[parameter]에 따라서 언어, 인코딩 등의 컨텐츠 타입 전달을 한다.
  • Referer

    • 이전 웹 페이지의 주소를 알려준다.
    • 해당 헤더를 참조해 주소 요청의 근원지가 어디인지 알 수 있다.
  • Content-Type, Content-Length

    • 바디가 존재하는 경우 바디의 종류와 길이를 알려주는 헤더
    • 요청/응답 메시지에서 사용
  • Cookie

    • 쿠키
      • 쿠키는 변수와 값의 쌍으로 구성된 집합
      • 여러 요청에 걸쳐 클라이언트에서 동일한 데이터를 전달할 필요가 있을 때 사용
      • 하나의 쿠키를 통해 여러 데이터를 전달할 수 있다.
        • 대표적인 예시로는 세션 ID 등이 있음
  • 바디

    • 데이터가 전송되는 부분
    • Content-Type에 따라 형태가 달라진다
HTTP 응답 메시지
<버전> <응답 코드> <응답 코드 텍스트>
<헤더>
<바디>
  • 첫 줄만 요청 메시지와 다르고, 헤더와 바디 부분의 형식은 동일하다.

  • 버전

    • 응답 메시지의 HTTP 버전을 알려준다.
  • 응답 코드/응답 코드 텍스트

    • 숫자와 텍스트로 표시된다.
    • 요청이 성공된 것을 알려주거나, 에러의 종류를 알려준다.
    • 응답 코드 뒤의 텍스트는 사용자의 가독성을 위함이다.
    • 응답 코드는 100~500번대까지 있음
      • 앞자리 숫자에따라 응답 코드가 의미하는 바가 달라진다.
응답 헤더
  • server
    • server 헤더는 웹 서버와 웹 프레임웤의 버전 등의 정보를 알려준다.
    • 보안 상의 이유로, 버전 정보를 삭제하여 전송하기도 함
  • Set-Cookie
    • 서버에서 클라이언트로 쿠기를 전달할 때 사용
    • 전달된 쿠키는 웹 브라우저에서 저장
    • 유효기간 동안 요청 메시지의 cookie헤더를 통해 다시 전송된다.
    • 헤더의 종류
      • Expires
        • 쿠키의 유효기간을 설정한다.
        • Expires가 지정되지 않으면, 세션이 종료 될 때까지 유효기간을 가진다.
        • 일반적으로는 웹 브라우저가 종료되면 세션이 종료 된다.
          • 특별한 경우 서버의 구현 방법에 따라 세션이 유지되기도 한다.
      • Path
        • 쿠키를 전송할 리소스의 경로를 지정한다.
        • 지정된 리소스를 요청 할 때 쿠키를 전송하는데, 서브 디렉터리까지 같이 매칭함
      • Secure
        • 해당 옵션을 지정한 쿠키는 HTTP 요청 시에는 전달되지 않고, HTTPS 프로토콜을 사용하여 요청이 암호화되어 전송 될 때만 전달 된다.
      • HttpOnly
        • 쿠키가 노출되지 않도록 보호하기 위한 옵션
        • 해당 키워드를 사용하면 쿠키 값이 자바스크립트에 의해 접근 되는 것을 방지할 수 있다.
      • X-Frame-Options
        • <frame> 또는 <iframe> 등을 사용하여 웹 페이지가 출력 되는 것을 제어하기 위한 헤더이다.
        • 프레임을 이용하여 웹 페이지를 표시하면, 클릭 재킹 공격에 노출 될 수 있다.
          • 클릭 재킹 : 공격자가 웹 페이지의 컴포넌트에 악성 링크를 보이지 않게 숨겨두는 공격 유형
        • Deny와 SAMEORIGIN 옵션이 존재한다.
      • X-XSS-Protection
        • 리플렉티드 크로스 사이트 스크립팅 공격이 탐지 되었을 때, 웹 페이지가 로딩 되는 것을 막아준다.
      • X-Content-Type-Otions
        • MIME 스니핑을 차단하기 위해 사용되는 헤더
        • MIME 스니핑
          • 웹 브라우저가 특정 파일을 읽을 때 파일의 실제 내용과 Content-Type에 설정도니 내용이 다를 때 파일의 내용에 따라 파일의 형식을 추측하여 실행하는 점을 이용한 공격