Network

Network

Http

CSRF

  • Cross-Site Request Forgery
  • CSRF는 웹사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격을 말한다. 사이트 간 스크립팅(XSS)을 이용한 공격이 사용자가 특정 웹사이트를 신용하는 점을 노린 것이라면, CSRF는 특정 웹사이트가 사용자의 웹 브라우저를 신용하는 상태를 노린 것이다. 일단 사용자가 웹사이트에 로그인한 상태에서 사이트간 요청 위조 공격 코드가 삽입된 페이지를 열면, 공격 대상이 되는 웹사이트는 위조된 공격 명령이 믿을 수 있는 사용자로부터 발송된 것으로 판단하게 되어 공격에 노출된다.

CORS

  • Cross-Origin Resource Sharing
  • 웹 애플리케이션은 리소스가 자신의 출처(도메인, 프로토콜, 포트)와 다를 때 교차 출처 HTTP 요청을 실행합니다.
  • 교차 출처 요청의 예시: https://domain-a.com의 프론트 엔드 JavaScript 코드가 XMLHttpRequest를 사용하여 https://domain-b.com/data.json을 요청하는 경우. Decorator
  • 해결법
    • Access-Control-Allow-Origin response
    • JSONP

Method

GET

  • idempotent
  • 서버에게 리소스를 달라고 요청하기 위해 쓰임
  • HTTP/1.1은 서버가 이 메서드를 구현할 것을 요구
  • 정확히 GET 처러 행동하지만, 서버는 응답으로 헤더만을 돌려줌 (엔터티 본문 X)
  • 리소스를 가져오지 않고도 그에 대해 무엇인가를 알아낼 수 있다.
  • 응답의 상태 코드를 통해, 개체가 존재하는지 확인할 수 있다.
  • 헤더를 확인하여 리소스가 변경되었는지 검사할 수 있다.

PUT

  • 서버에서 문서를 씀
  • 웹페이지를 만들고 웹 서버에 직접 게시할 수 있도록 해줌
  • 서버가 요청의 본문을 가지고 요청 URL의 이름대로 새 문서를 만들거나, 이미 URL이 존재한다면 본문을 사용해서 교체하는 것
  • 콘텐츠를 변경할 수 있게 해주기 떄문에, 많은 웹 서버가 PUT을 수행하기 전에 사용자에게 비밀번호를 입력해서 로그인을 하도록 요구

POST

  • Non-Idempotent
  • 서버에 입력 데이터를 전송하기 위해서 설계

TRACE

  • 클라이언트에게 자신의 요청이 서버에 도달했을 때 어떻게 보이게 되는지 알려줌

OPTION

  • 웹 서버에게 여려 가지 종류의 지원 범위에 대해서 물어봄

DELETE

  • 서버에게 요청 URL로 지정한 리소스를 삭제할 것을 요청

RESTful API

  • Representational State Transfer 라는 용어의 약자로서 2000년도에 로이 필딩 (Roy Fielding)의 박사학위 논문에서 최초로 소개
  • REST 요소
    • 자원 (Resource) - URL
    • 행위 (Verb) - HTTP Method
    • 표현 (Repesentations)
  • REST 의 특정
    • Uniform Interface
      • Uniform Interface는 URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일을 말함
      • Uniform interface 제약조건
        • Identification of Resources
        • Manipulation of Resources Thorough Representations
        • Self-Descriptive Message
        • HATEOS (Hypermedia as The Engine of Application State)
    • Stateless
      • REST는 무상태성 성격
      • 다시 말해 작업을 위한 상태정보를 따로 저장하고 관리하지 않음
      • 세션 정보나 쿠키정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청만을 단순히 처리하면 됨
      • 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해짐
    • Cacheable
      • REST의 가장 큰 특징 중 하나는 HTTP라는 기존 웹표준을 그대로 사용
      • 웹에서 사용하는 기존 인프라를 그대로 활용이 가능
      • HTTP가 가진 캐싱 기능이 적용 가능
      • HTTP 프로토콜 표준에서 사용하는 Last-Modified태그나 E-Tag를 이용하면 캐싱 구현이 가능
    • Code-On-Demand (Optional)
      • Server로부터 스크립트를 받아서 Client에서 실행
    • Client - Server
      • REST 서버는 API 제공
      • 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조로 각각의 역할이 확실히 구분되기 때문에 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로간 의존성이 줄어들게 됨
    • Layered System
      • REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고 PROXY, 게이트웨이 같은 네트워크 기반의 중간매체를 사용할 수 있게 함

HTTP와 HTTPS 차이 및 S가 보호하는 OSI7계층 위치

  • HTTP
    • 인터넷에서 하이퍼텍스트(hypertext) 문서를 교환하기 위하여 사용되는 통신규약
    • 하이퍼텍스트는 문서 중간중간에 특정 키워드를 두고 문자나 그림을 상호 유기적으로 결합하여 연결시킴으로써, 서로 다른 문서라 할지라도 하나의 문서인 것처럼 보이면서 참조하기 쉽도록 하는 방식을 의미
  • HTTPS
    • 전송 중의 메세지를 전송 계층 보안(TLS Transport Layer Security) 프로토콜을 사용해 암호화하는 HTTP의 보안 버전
    • 암호화 : 메세지는 전송 중에 제3자에게 읽힐 수 없음
    • 무결성 : 암호화된 메시지가 디지털 서명되고 서명이 복호화되기 전에는 암호학적으로 검증되기 때문에 전송 중에 변경되지 않음
    • 인증 : 서버는 클라이언트가 메시지를 주고 받으려던 바로 그 서버다.
  • HTTPS 핸드세이크
    1. ClientHello 메세지 전송 (C->S, 비암호)
    2. ServerHello 메세지 전송 (C<-S, 비암호)
    3. 서버 HTTPS 인증서 제공 (ServerCertificate) (C<-S, 비암호)
    4. 암호화 방식에 따라 ServerKeyExchange 메세지 전송 (C<-S, 비암호)
    5. 클라이언트 HTTPS 인증서가 필요한지 여부 (CertificateRequest) 전송 (C<-S, 비암호)
    6. ServerHello가 완료됐다는 (ServerHelloDone) 메세지 전송 (C<-S, 비암호)
    7. 클라이언트 인증서 제공 (ClientCerificate) (C->S, 비암호)
    8. ServerHello 메세지 전송 (C->S, 공개키/개인키 암호)
    9. 클라이언트 인증서를 검증하는(CertificateVerify) 메세지 전송 (C->S, 공개키/개인키 암호)
    10. 클라이언트에서 이제부터 암호화가 시작됨을 알림 (ChangeCipherSpec) (C<->S, 비암호)
    11. ServerHello 메세지 전송 (C->S, 합의된 비밀키로 암호화)
    12. 서버측에서 클라이언트로 암호화가 시작됨을 알림 (ChangeCipherSpec) (C<-S, 비암호)
    13. 서버 측에서 핸드세이크가 끝났다는 메세지(Finsihed) 전송 (C<-S, 합의된 비밀키로 암호화)

TCP UDP 차이

  • TCP
    • 유니캐스트 연결 지향 (Connection-Oriented) 프로토콜
    • 기본적으로 IP 계층(혹은 아래 계층)에서의 패킷 손실, 중복, 혹은 오류에 의해 발생될 수 있는 모든 데이터 전송 문제를 검출하고 복구
  • UDP
    • 단순한 데이터그램 지향 트랜스포트 계층 프로토콜
    • 연결의 설정과 종료를 포함하지 않는 비연결형 (Connectionless) 프로토콜
    • 오류 정정, 순서화, 중복 제거, 흐름 제어 혹은 혼잡 제어를 제공하지 않음
    • 오류 검출은 제공할 수 있으며, 트랜스포트 계층에서 종단간 검사합을 포함

TCP 3-WAY HAND SHAKING

  • TCP/IP 프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미
  • 양쪽 모두 데이타를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이타 전달이 시작하기전에 한쪽이 다른 쪽이 준비되었다는 것을 알수 있도록 함
  • 양쪽 모두 상대편에 대한 초기 순차일련변호를 얻을 수 있도록 함
  • 과정
    1. A클라이언트는 B서버에 접속을 요청하는 SYN 패킷을 보낸다. 이때 A클라이언트는 SYN 을 보내고 SYN/ACK 응답을 기다리는SYN_SENT 상태가 되는 것이다.
    2. B서버는 SYN요청을 받고 A클라이언트에게 요청을 수락한다는 ACK 와 SYN flag 가 설정된 패킷을 발송하고 A가 다시 ACK으로 응답하기를 기다린다. 이때 B서버는 SYN_RECEIVED 상태가 된다.
    3. A클라이언트는 B서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 되는것이다. 이때의 B서버 상태가 ESTABLISHED 이다.