Published on

동일 출처 정책 (Same-Origin Policy)에 대한 이해

Authors
  • avatar
    Name
    Inhwan Cho
    Twitter

동일 출처 정책(Same-Origin Policy)은 웹 보안의 핵심 원칙 중 하나입니다.

이 정책은 한 출처에서 로드된 문서나 스크립트가 다른 출처의 자원을 함부로 가져오지 못하도록 제한하는 보안 메커니즘입니다.

여기서 출처(origin)프로토콜(예: http, https), 호스트(도메인 예:example.com), 포트(예: 3000)를 모두 포함한 구성요소를 의미합니다.

1. 동일 출처 정책의 목적

동일 출처 정책의 주된 목적은 사용자의 데이터를 보호하는 것입니다.

만약 이 정책이 없다면 악의적인 웹 사이트가 사용자의 세션을 도용하거나, 다른 사이트에 대한 사용자의 행위를 무단으로 조작할 수 있습니다.

이렇게 되면 사용자의 개인정보와 데이터 보안이 크게 위협받을 수 있습니다.

2. 동일 출처 정책의 규칙

동일 출처 정책에 따르면, 웹 페이지에서 실행되는 스크립트는 다음 조건을 만족할 때만 다른 출처의 리소스와 상호작용할 수 있습니다:

  • 프로토콜이 동일합니다.
  • 호스트(도메인)가 동일합니다.
  • 포트 번호가 동일합니다.

예시

예시를 통해 보면 매우 쉽게 이해할 수 있습니다.

출처 예시 1출처 예시 2결과
http://example.comhttp://example.com/page1성공
http://example.comhttps://example.com실패 (프로토콜 불일치)
http://example.comhttp://example.org실패 (도메인 불일치)
http://example.com:80http://example.com:8080실패 (포트 불일치)

이 표에서 볼 수 있듯이, 동일 출처 정책은 매우 엄격하여, 웹 애플리케이션의 보안을 강화합니다.


3. 예외 상황 및 해결책

물론, 실제 웹 개발에서는 다른 출처의 리소스를 안전하게 사용해야 할 필요성이 있습니다.

이때 사용할 수 있는 몇 가지 예외 상황 및 해결책이 있습니다.

  • CORS (Cross-Origin Resource Sharing): 서버에서 특정 출처에 대한 접근을 허용하도록 설정할 수 있습니다.

  • JSONP (JSON with Padding): 스크립트 태그는 동일 출처 정책의 제약을 받지 않으므로, JSONP를 이용하여 서버로부터 데이터를 받아올 수 있습니다.

표와 예시를 통해 알기 쉽게 설명하겠습니다.

기준CORSJSONP
기술 타입HTTP 헤더를 사용한 보안 메커니즘<script> 태그를 이용한 JavaScript 기법
HTTP메소드 지원 모든 HTTP 메소드 (GET, POST, PUT 등) 지원오직 GET 메소드만 지원
보안안전하게 구성 가능. SOP를 준수하면서 CORS 응답 헤더로 보안 설정XSS(Cross-Site Scripting) 취약점을 유발할 수 있음
데이터 포맷JSON, XML, 텍스트 등 다양한 데이터 포맷 지원JSON 데이터만 지원
브라우저 지원모든 현대 브라우저에서 지원거의 모든 브라우저에서 지원
사용 예시서버: Access-Control-Allow-Origin: *(star) 헤더를 응답에 추가하여 모든 출처에서의 접근을 허용.
클라이언트: AJAX 요청 시 특별한 설정이 필요 없음.
서버: JSON 데이터를 함수 호출로 래핑.
클라이언트: <script> 태그를 통해 원격 JS 파일 요청.

CORS의 서버에서의 사용 예시

app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*'); // 모든 출처에서의 접근 허용
  next();
});