Same-origin policy(SOP, 동일 출처 정책) 란?
쿠키(Cookie) & 세션(Session) 관련해서 확인할 내용이 있어서 다시 한번 책을 읽어 보던 중 Same-origin policy(SOP, 동일 출처 정책) 개념에 대해서 한번 더 공부할 겸 정리를 해보려고 한다.
그럼 Same-origin policy(SOP, 동일 출처 정책)에 대해서 알아보도록 하자.
1. Origin 이란?
일단 Same-origin policy(SOP)을 간단히 영어 단어로만 풀어서 설명을 하면 아래와 같다.
- Same = 동일, 같은
- Origin = 기원, 출처
- Policy = 정책
Same-origin policy을 해석해서 보면 같은(동일) 출처 정책으로 이해할 수 있다.
그러면 Origin이 정확히 어떤 의미를 가지는지를 확인해보도록 하자.
일반적으로 사용하는 단어가 아니라 브라우저에서 통신 시 사용하는 부분이기에 Origin이라는 것을 이해하고 넘어가야 한다.
Origin은 예를 들면 "https://happylie.tistory.com" 같이 표현할 수 있으며, 아래와 같이 구분된다.
- 프로토콜(Protocol, Scheme) = https
- 호스트(Host) = happylie.tistory.com
- 포트(Port) = 443
그럼 일단 Origin이 어떤 건지에 대해서 알아보았다.
2. Same-origin policy(SOP) 란?
그럼 이제 Same-origin policy(SOP)에 대해서 알아보도록 하자.
SOP는 웹 애플리케이션 보안 모델로 중요한 개념이며, 동일한 Origin 사이트에서 Ajax 등 리소스를 같이 사용할 수 있으나 Origin이 틀린 사이트에서 다른 Origin의 Ajax 등 리소스를 사용할 수 없도록 제한하는 보안 모델이다.
결국, 웹 브라우저에서 보안을 위해서 동일한 Origin에 대해서만 허용하여 요청을 주고받을 수 있도록 하는 정책이다.
참고로 이미지, CSS, Javascript 등과 같이 리소스를 불러오는 <img>, <style>, <script> 등의 태그에서는 SOP의 영향을 받지 않는다.
조금 이해가 어려울 수 있으나 아래 표를 보면 정말 쉽게 이해를 할 수 있다.
기본 URL 값은 위에 예제로 사용한 "https://happylie.tistory.com"이다.
Site URL | Origin | 결과 | 이유 |
https://happylie.tistory.com/2.html | Same Origin | 허용 | Path만 다름 |
https://happylie.tistory.com/category/3.html | Same Origin | 허용 | Path만 다름 |
http://happylie.tistory.com/2.html | Cross Origin | 차단 | 프로토콜(Protocol, Scheme)가 다름 |
https://test.tistory.com/2.html | Cross Origin | 차단 | 호스트(Host)가 다름 |
https://happylie.tistory.com:8443/2.html | Cross Origin | 차단 | 포트(Port)가 다름 |
이렇게 Same-origin policy(SOP)는 동일한 Origin이 아닌 곳에서 리소스 요청 등이 왔을 경우 허용, 차단을 하게 되는 정책이며 보안에서 중요한 요소를 함을 알 수 있다.
하지만, 서비스를 만들고 운영하다 보면 동일한 Origin이 아닌 곳에서 데이터를 주고받아야 하는 경우가 있을 수 있다.
쉽게 설명하면 아래와 같은 경로는 모두 Host가 다르기 때문에 Origin이 다름으로 확인이 된다.
- 메일 : https://mail.daum.net
- 카페 : https://cafe.daum.net
- 블로그 : https://blog.daum.net
- 뉴스 : https://news.daum.net
이러한 부분에서 Same-origin policy(SOP)를 적용받지 않고 공유를 해야 하는 방법 필요하다.
그래서 위와 같은 상황에서 여러 부분을 공유하기 위해서 사용할 수 있도록 나온 방법이 "Cross-origin resource sharing(CORS, 교차 출처 리소스 공유)"라는 방법이다.
이 방법은 Same-origin policy(SOP) 내용에 이어서 다시 한번 정리해서 작성하도록 하겠다.
🌵댓글