웹 브라우저를 통해 수많은 사이트를 오가는 현대의 인터넷 환경에서, 한 사이트의 스크립트가 아무 제약 없이 다른 사이트의 데이터에 접근할 수 있다면 어떤 일이 벌어질까요? 내 메일함의 내용을 공격자의 사이트가 읽어가거나, 로그인 세션을 훔치는 일이 빈번해질 것입니다. 이를 방지하는 브라우저의 최소한의 방어선이 바로 **SOP(Same-Origin Policy)**입니다.
목차
-
SOP(Same-Origin Policy)의 정의
-
출처(Origin)를 결정하는 3가지 요소
-
SOP가 왜 중요한가? (보안상 이유)
-
SOP의 한계와 해결책: CORS
-
요약 및 결론
1. SOP(Same-Origin Policy)의 정의
**SOP(동일 출처 정책)**란, “어떤 출처(Origin)에서 불러온 문서나 스크립트가 다른 출처에서 가져온 리소스와 상호작용하는 것을 제한하는 보안 방식”입니다.
-
쉽게 말해:
A.com에서 실행된 자바스크립트는B.com의 데이터(API 응답, 쿠키 등)를 함부로 읽어갈 수 없도록 브라우저가 차단하는 규칙입니다. -
시행 주체: 이 정책은 서버가 아닌 웹 브라우저(크롬, 사파리 등) 내부에 구현되어 있습니다.
2. 출처(Origin)를 결정하는 3가지 요소
브라우저가 “두 사이트의 출처가 같다”라고 판단하려면 다음의 세 가지 요소가 모두 일치해야 합니다.
| 요소 | 설명 | 예시 (기준: https://ci2u.com:80) |
| Protocol | 통신 규약 (HTTP, HTTPS) | http:// (다름 – 불일치) |
| Host | 도메인 이름 | https://api.ci2u.com (다름 – 불일치) |
| Port | 접속 포트 번호 | https://ci2u.com:443 (다름 – 불일치) |
참고:
https://ci2u.com/blog와https://ci2u.com/setup은 프로토콜, 호스트, 포트가 모두 같으므로 동일 출처입니다.
3. SOP가 왜 중요한가? (보안상 이유)
만약 SOP가 없다면, 우리가 앞서 배운 보안 취약점들이 걷잡을 수 없이 커집니다.
-
정보 탈취 방지: 공격자가 만든 악성 사이트가 브라우저에 남아있는 사용자의 네이버 세션 쿠키를 이용해 네이버 메일 API를 호출하고 내용을 읽어가는 것을 막아줍니다.
-
XSS 피해 최소화: XSS 공격으로 스크립트가 실행되더라도, SOP 덕분에 공격자의 서버로 민감한 데이터를 전송하는 행위에 제약이 생깁니다.
4. SOP의 한계와 해결책: CORS
현대 웹 서비스는 여러 도메인에 흩어진 리소스를 가져와 사용하는 경우가 많습니다. (예: my-app.com에서 api.google.com 호출) 이때 SOP는 개발에 걸림돌이 됩니다. 이를 안전하게 허용하기 위한 예외 조항이 바로 CORS입니다.
-
CORS (Cross-Origin Resource Sharing): 서버가 “특정 외부 도메인에서의 접근은 허용하겠다”라고 브라우저에게 알려주는 방식입니다.
-
차이점: SOP는 기본적으로 차단하는 정책이고, CORS는 이를 선택적으로 허용해주는 메커니즘입니다.
5. 결론: 요약 및 제언

SOP는 웹 생태계를 안전하게 지탱하는 기초 중의 기초입니다.
-
개념: 브라우저가 다른 출처 간의 데이터 상호작용을 차단하는 기본 보안 정책입니다.
-
판단: 프로토콜, 호스트, 포트가 모두 같아야 동일 출처로 인정됩니다.
-
조화: 보안을 위해 SOP를 유지하되, 정당한 외부 리소스 요청은 CORS 설정을 통해 해결해야 합니다.
[함께 읽어볼 만한 주제]
-
CORS 에러 해결법:
Access-Control-Allow-Origin헤더 설정하기 -
브라우저의 또 다른 보안 정책: CSP(Content Security Policy) 입문
-
쿠키의
SameSite속성이 SOP와 결합할 때의 효과
전문가 코멘트: 개발 중 마주치는 ‘CORS 에러’는 짜증 나는 장애물이 아니라, 브라우저가 여러분과 사용자의 정보를 지키기 위해 열렬히 일하고 있다는 증거입니다. 정책을 이해하면 해결책도 명확해집니다.