Computer Science/Network

맨날 헷갈리는 Origin Site Host 개념 구분하기 CORS와 CSRF 이해하기

TLdkt 2022. 10. 17. 22:39
728x90
반응형

⚓들어가며

도커 컴포즈를 쓰기 위해 책을 보다가 '같은 호스트일 때는 괜찮지만 다른 호스트에서 요청이 들어온다면'이라는 표현이 자꾸 나와서 도대체 호스트는 무엇인지 알아보게 됐다.
한편, Origin과 Site의 개념도 구분 방법이 불분명한 것 같아서 전체적으로 용어를 정리해보았다.


Host

네트워크에 연결이 된 컴퓨터(노드)

네트워크를 이용하기 위해 네트워크 주소가 할당된 노드 

 

*노드: 네트워크 공간 상에 있는 모든 장치

 

종류

  • 네트워크를 이루는 호스트(스위치, 모뎀, 허브 등)
    • 네트워크 상에서 호스트끼리 데이터를 주고받을 수 있도록 중간자 역할을 하는 노드
  • 네트워크를 이용하는 호스트=엔드포인트(단말기)

FQDN :www.naver.com

 

DNS상 노드(호스트)의 정확한 위치를 표현하는 Fully Qualified Domain name

도메인의 전체 이름을 표기하는 방식이다.

즉, 최종 호스트명을 포함하는 도메인명을 뜻한다.

www(호스트명), yahoo.com.(도메인명), www.yahoo.com.(FQDN)

원칙적으로 도메인의 표기는 네임스페이스상의 경로를 명확히 하기 위해 끝에 도트('.' 루트 도메인)를 포함하여야 하지만, 보통 도트를 생략하고 사용한다.

 

 

 

 

Origin

구성: 스킴, 호스트이름, 포트(있으면)

스킴

사용할 프로토콜

 

호스트 네임

= 각 컴퓨터에 할당되는 이름

호스트의 지역 이름+도메인 이름을 붙인 것

 

ko.wikipedia.org라는 호스트 이름

도메인 이름은 ‘wikipedia.org’ 그 앞에 호스트의 지역 이름인 ‘ko’를 붙여 호스트 이름을 만든다.

 

호스트 이름: DNS를 통해 계층적으로 IP 주소로 변환되거나, 사용자의 컴퓨터에 있는 hosts 파일에서 IP 주소를 검색하여 사용하게 됨

 

포트

=네트워크 상의 서비스나 특정 프로세스를 구분시켜주는 단위

 

 

same origin

  • same scheme, hostname, port(implicit)
  • 포트 번호가 있다면 무조건 match해야 하지만
  • 포트번호 전까지만 적어도 같은 origin으로 간주

Site

인터넷 프로토콜 기반 네트워크에서 도메인 이름 or IP주소, 루트 경로만으
effective TLD, SLD(second level Domain)의 조합

*TLD=top level domain
.com, .org등등 root zone DB list에 있는 도메인

*SLD
등록처나 서비스 제공자가 등록한 도메인 이름


Same site

Origin과 달리 포트번호와 스킴이 달라도 상관없다

포트번호는 same-origin에서는 implicit 매치였다면, same site에서는 아예 상관이 없다

 

 

 

 

Schemeful same site

스킴까지 일치해야 한다

 


CORS와 SOP 정책

CORS:: Cross Origin Resource Sharing

다른 origin에 존재하는 리소스에 접근할 수 있는 권한 부여

SOP :: Same Origin Policy

같은 origin에 존재하는 리소스에게만 접근을 허용하는 정책

 

 

사례

리소스가 자신의 Origin(도메인, 프로토콜, 포트)과 다를 때 CORS http 요청 실행하게 됨

1) 프론트 엔드(https://domain-a.com)의 JavaScript 코드가 XMLHttpRequest를 사용하여 https://domain-b.com/data.json을 요청→SOP에 의해 제한(도메인이 다름)

 

2) 프론트, 백 코드를 한 로컬에 깔았다고 해도, 프론트의 포트가 3000이고 백의 포트가 8080이면 다른 origin이므로 제한된다.

CSRF(Cross-Site Request Forgery)

사이트 간 요청을 위조하는 공격
앞서 CORS에러는 SOP정책에 의해 발생하고
CSRF공격은 다른 사이트에서 신뢰할 수 있는 사용자를 가장해 요청을 보내 발생한다
참고로 Spring Security에서는 기본적으로 클라이언트에서 CSRF토큰 수신 후 검증하는 방식을 쓴다.

✨나가며

같은 개념을 대여섯번쯤 다시 보고 있는 것 같은데 이제야 살짝 익숙해지는 것 같다. 

요약하자면 Host는 네트워크상의 여러 기기 중 네트워크를 사용하는 단말기를 의미하며, 일반적인 url에서  Origin은 스킴에서 포트번호까지 같아야 하고, Site는 스킴이나 포트는 상관없다. 

 

 

 

 

 

 

Ref

https://ko.wikipedia.org/wiki/%ED%98%B8%EC%8A%A4%ED%8A%B8_(%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC)

호스트 (네트워크) - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 네트워크 호스트(network host)는 컴퓨터 네트워크에 연결된 컴퓨터나 기타 장치이다. 네트워크 호스트는 정보 리소스, 서비스, 애플리케이션을 네트워크 상의 사

ko.wikipedia.org

https://web.dev/same-site-same-origin/

728x90
반응형