동일 출처 정책
동일 출처 정책(same-origin policy)은 웹 브라우저가 서로 다른 출처에서 로딩된 문서와 스크립트 사이의 특정 데이터 접근을 제한하는 보안 원칙이다. 사이트가 여러 출처의 자원을 포함할 수는 있지만, 임의의 외부 페이지가 다른 사이트의 사용자 데이터를 자유롭게 읽지 못하도록...
| 분류 | 브라우저 접근 제한 정책 |
|---|---|
| 역할 | 서로 다른 출처의 데이터 접근 격리 |
| 관련 기술 | World Wide Web, HTTP, 웹 브라우저, 웹 서버 |
| 표준 및 참고 | MDN: Same-origin policy |
동일 출처 정책(same-origin policy)은 웹 브라우저가 서로 다른 출처에서 로딩된 문서와 스크립트 사이의 특정 데이터 접근을 제한하는 보안 원칙이다. 사이트가 여러 출처의 자원을 포함할 수는 있지만, 임의의 외부 페이지가 다른 사이트의 사용자 데이터를 자유롭게 읽지 못하도록 격리하는 데 목적이 있다. 브라우저 보안의 기본 모델을 구성하며 CORS와 문서 간 메시징 같은 제도는 예외적인 통신 경로를 정의한다.
웹 출처(origin)는 일반적으로 URL의 스킴, 호스트, 포트 조합으로 결정된다. 같은 도메인 이름이라도 포트나 스킴이 달라지면 서로 다른 출처가 될 수 있고, 같은 조직이 운영하는 하위 도메인들도 기본적으로 서로 다른 출처로 취급된다. 출처와 사이트(site) 개념은 완전히 같지 않아 쿠키의 SameSite 정책과 출처 기반 접근 제한을 구분해야 한다.
스크립트는 같은 출처에 속한 문서의 DOM과 저장 데이터에 비교적 폭넓게 접근할 수 있지만 다른 출처의 창이나 프레임에서는 가능한 작업이 제한된다. 그러나 브라우저가 다른 출처의 이미지나 스크립트를 로딩하는 행위가 항상 금지되는 것은 아니다. 자원 삽입 가능 여부와 해당 응답 데이터를 자바스크립트에서 읽을 수 있는지 여부는 별도의 문제다.
서버는 CORS 헤더를 이용하여 다른 출처의 스크립트가 특정 응답을 읽도록 허용할 수 있다. 서로 다른 출처의 창은 postMessage를 통해 명시적으로 메시지를 교환할 수 있으며 수신자는 origin을 검증해야 한다. 쿠키와 인증 헤더가 포함된 요청의 부작용을 막기 위한 CSRF 방어는 동일 출처 정책과 역할이 다르다.
동일 출처 정책은 웹 애플리케이션 간의 신뢰 경계를 설정하는 출발점이지만 모든 공격을 방어하지는 않는다. 악성 스크립트가 원래 사이트의 출처에서 실행되는 XSS는 그 출처의 권한을 악용할 수 있다. 샌드박스, CSP, 적절한 쿠키 설정 및 인증·인가를 함께 적용하면 출처 제한만으로 보호하기 어려운 부분을 보완할 수 있다.[1]