Everyday Dev System

CORS 란? 본문

매일/취업준비

CORS 란?

chaeyoung- 2023. 10. 12. 13:43

 

출처(Origin)란?

출처(Origin)는 다음과 같은 3가지를 합친 것을 의미합니다.

 

프로토콜 : http과 https는 다른 프로토콜 입니다.

도메인 : naver.com과 google.com 은 다릅니다.

포트 번호 : 8080과 22 포트는 다릅니다.

ex) https://www.google.com:8080

 

 

Cross-Origin이란? 

프로토콜, 도메인, 포트 번호 중 한가지라도 상이한 경우를 말합니다.

 

 

 


CORS (Cross-Origin Resource Sharing) 

from. Ideogram

 

다른 출처에서도 리소스를 안전하게 공유할 수 있도록 하는 것이 CORS 정책입니다.
이와 반대로 같은 출처에서만 리소스를 공유할 수 있는 규칙을 가진 정책은 SOP(Same-Origin Policy) 입니다.

 

보통 브라우저에서는 보안적인 이유로 Cross-Origin HTTP 요청들을 제한합니다.

(프로토콜, 도메인, 포트 번호가 다른 HTTP 요청을 제한한다는 의미)

 

그렇기 때문에, Cross-Origin 요청을 하려면 서버의 동의가 필요하고,

만약 서버가 이를 동의한다면 브라주어에서 요청을 허락하고, 미동의 시에는 브라우저에서 거절합니다.

 

그러나 웹이라는 플랫폼을 다른 출처의 리소스를 가져오는 일이 흔하므로, 무작정 제한할 수는 없는 노릇입니다.

몇 가지 예외 조항을 두고 이 조항에 해당하는 리소스 요청은 출처가 상이하더라도 허용하기로 하였고,

그 중 하나가 'CORS 정책을 지킨 리소스 요청' 입니다.

 

 

 

다른 출처로 리소스를 요청한다면 SOP 정책을 위반,

거기다가 SOP의 예외 조항인 CORS 정책까지 지키지 않는다면 아예 다른 출처의 리소스를 사용할 수 없습니다.

 

즉, 다른 출처의 리소스를 사용하는 것을 제한하는 행위는 하나의 정책만으로 결정되는 사항이 아닙니다.

SOP에서 정의된 예외 조항과 CORS를 사용할 수 있는 케이스에 맞지 않을 경우, 리소스 요청이 제한되는 케이스에 해당합니다.

 

 

출처를 비교하는 방법은 URL의 구성 요소 중 Scheme, Host, Port 이 3가지가 동일 여부로 이뤄진다.

또한, 비교 로직이 서버에 구현된 스펙이 아닌 브라우저에 구현되어 있는 스펙에 따른다.

 

예를 들어, CORS 정책을 위반하는 리소스 요청에 서버가 정상적인 응답을 하더라도,

브라우저에서 응답을 분석하여 CORS 정책 위반이라 판단되면 해당 응답을 파기시킵니다.

 

 

 

CORS 는 왜 필요한가?

CORS가 없이 모든 곳에서 데이터를 요청할 수 있게 될 경우 다른 사이트에서 원래 사이트를 흉내낼 수 있습니다.

 

예를 들어 기존 사이트와 완전히 동일하게 동작하도록 하여 사용자가 로그인을 하도록 만들고,

로그인했던 세션을 탈취하여 악의적으로 정보를 추출하거나 다른 사람의 정보를 입력하는 등의 공격이 가능합니다.

 

이와 같은 공격을 할 수 없도록 브라우저에서 보호하고,

필요한 경우에만 서버와 협의하여 요청할 수 있도록 하기 위해 필요합니다.

 

 

 

 


references : 

https://evan-moon.github.io/2020/05/21/about-cors/

 

CORS는 왜 이렇게 우리를 힘들게 하는걸까?

이번 포스팅에서는 웹 개발자라면 한번쯤은 얻어맞아 봤을 법한 정책에 대한 이야기를 해보려고 한다. 사실 웹 개발을 하다보면 CORS 정책 위반으로 인해 에러가 발생하는 상황은 굉장히 흔해서

evan-moon.github.io

 

 

'매일 > 취업준비' 카테고리의 다른 글

XSS 공격  (0) 2023.10.12