Network/WEB BROWSER

[CORS] CORS란? What is CORS?

Bans 2022. 8. 26. 00:31

(이미지 출처 : https://blog.learncodeonline.in/web-security-cross-origin-resource-sharing-cors)

 

CORS ( Cross-Origin Resource Sharing )

 

Cross Origin(교차 출처) 의 Resource (정보) 를 Sharing (공유)한다.

 

문자 그대로 번역해본 내용이다.

사실 '교차 출처' 라는 단어가 번역투라 우리말로 어떤 의미인지 잘 이해되지 않는다.

'교차 출처' (Cross Origin) 를 이해하기 위해 먼저,

'동일 출처' (Same Origin) 가 무엇인지에 대해 살펴보도록 하자.

 

 

SOP ( Same Origin Policy )

 

example of 'Same Origin'

 

SOP 는 '동일 출처 정책' 으로, 2011년 11월 RFC6454 에서 등장한 보안 정책이며

'같은 출처의 리소스만 관리할 수 있게' 명시해둔 정책이다.

이는 '알 수 없는 출처' 에서의 접근을 막기 위한 정책이며,

이 정책 이전에 존재했던

보안 취약점을 통한 해킹들을 방지하기 위함이다.

 

 

 

SOP 가 확립되기 이전,

해커들은 특정 웹사이트를 이용하여 (위의 이미지 예시에선 www.evilwebsite.com)  

그 웹사이트 내에서 (ex. iframe tag) 사용자가 금융 사이트에 접속하게 하여

정보를 탈취, 악용하는 수법의 바이러스(해킹 기법 or Tool)들을 사용하곤 했다.

 

 

SOP 의 적용 이후,

Same Origin 이 아닌 곳에서의 Resource Sharing 이 발생하게 될 때 ( == CORS )

브라우저가 이러한 접근을 차단하여 SOP 를 위반하였다는 경고 메시지를 출력해주고

'알 수 없는 출처' 에 대한 접근을 원천 차단하게 되었다.

 

참고 : CORS errors

 

CORS errors - HTTP | MDN

교차 출처 자원 공유 (CORS)는 서버가 same origin 정책(same-origin policy)을 완화할 수 있게 해 주는 표준입니다. 이는 일부 교차 출처 요청은 명시적으로 허용하고 다른 요청은 거부하는 데 사용됩니다.

developer.mozilla.org

 

 

 

이제 다시한번

Same Origin 과

Cross Origin 을 비교해 보자.

 

example of Same Origin & Cross-Origin

 

Cross-Origin (교차 출처) 의 의미가 이제 어느정도 이해가 되기 시작한다.

사실 Cross Origin 은

Same Origin 이 아닌 주소들을 의미하고

SOP의 정책에서 방지하고자 했던 '알 수 없는 출처' 의 정보 요청이다.

 

하지만 이 주소들이 '알 수 없는' 주소들이 아닌

'인증된', '내가 알고있는', '이 도메인과 밀접한 관련이 있는' 주소들이라면?

 

이러한 곳에서 오는 요청까지 SOP 의 정책으로 막힌다면

Web 이라는곳이 더이상 넓고 자유로운 정보의 바다가 되지 않을 수 있을 것이다..

(물론 자유엔 언제나 책임이 따른다)

 

그래서 브라우저는 Cross Origin 에서의 요청이 왔을 때

CORS 검증을 해야하는지 판단하는 절차를 거치게 되고

이를 preflight request 라고 한다.

 

참고 : CORS

 

CORS

 

ko.javascript.info

 

참고 : MDN CORS

 

교차 출처 리소스 공유 (CORS) - HTTP | MDN

교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라

developer.mozilla.org

 


 

여러 인증 절차를 거치고

인증된 주소들을 서버에 미리 알려주어서

CORS error 를 방지하고

안전한 검증을 거쳐 개발하는

'검증하는 개발자' 가 되자! 😎