[Web] Same Origin Policy, CORS란?

해피몬·2023년 2월 16일
0
post-thumbnail

SOP

Same Origin Policy(SOP, 동일 출처 정책)는 웹 보안의 핵심 정책 중 하나로, 브라우저가 서로 다른 출처에서 실행된 문서나 스크립트가 서로의 리소스에 접근하는 것을 방지하는 보안 메커니즘입니다. 이 정책은 웹 페이지 간에 악의적인 데이터 도용을 막기 위해 존재하며, 기본적으로 스크립트가 같은 출처(origin) 내의 리소스에만 접근할 수 있도록 제한합니다.

SOP의 출처 판단 기준

출처는 세 가지 요소를 기준으로 합니다:

  1. 프로토콜 (예: http, https)
  2. 호스트(도메인) (예: example.com)
  3. 포트 (예: 80, 443)
    세 요소가 모두 동일할 때 같은 출처로 간주되며, 이 경우 웹 애플리케이션은 자유롭게 자원을 공유할 수 있습니다. 세 요소 중 하나라도 다르면 다른 출처로 간주되어 SOP에 의해 리소스 접근이 차단될 수 있습니다.

SOP가 보호하는 영역

Same Origin Policy는 웹 애플리케이션의 여러 자원에 적용되어 작동합니다:

DOM(Document Object Model)

다른 출처의 웹 페이지가 현재 페이지의 DOM 요소를 직접 접근하거나 수정하는 것을 방지합니다.

쿠키

각 출처는 자신이 설정한 쿠키에만 접근할 수 있습니다.

XMLHttpRequest/Fetch

AJAX 요청도 같은 출처에서만 가능합니다. 다른 출처로 요청을 보내려면 CORS 정책을 통해 허용해야 합니다.

LocalStorage/SessionStorage

각 출처는 자신이 설정한 저장소 데이터만 사용할 수 있습니다.

SOP의 적용 예시

같은 출처의 경우

https://example.com/page1 에서 https://example.com/page2 의 DOM 요소나 쿠키에 접근하는 것은 SOP에 의해 허용됩니다.

다른 출처의 경우

https://example.com 에서 https://another-example.com 에 있는 데이터를 접근하거나 수정하려고 하면 SOP에 의해 차단됩니다.

CORS

CORS(Cross-Origin Resource Sharing)는 브라우저 보안 정책 중 하나로, 웹 애플리케이션이 한 출처에서 실행 중일 때 다른 출처의 리소스에 접근하는 것을 제어하는 방식입니다. 기본적으로, 웹 브라우저는 보안상의 이유로 서로 다른 출처(도메인, 프로토콜, 포트)를 갖는 리소스 간의 요청을 제한합니다. 이때 CORS는 서버가 특정 출처에 대해 리소스 접근을 허용할 수 있는 방법을 제공하는 메커니즘입니다.

CORS의 작동 방식

CORS는 HTTP 헤더를 통해 동작합니다. 서버는 클라이언트의 요청을 분석한 후, 응답에 특정 HTTP 헤더를 추가해 어떤 출처에서 요청이 허용되는지 명시합니다. 주요 헤더는 다음과 같습니다:

Access-Control-Allow-Origin

클라이언트 요청이 허용된 출처를 명시합니다. 예를 들어, Access-Control-Allow-Origin: *는 모든 출처의 요청을 허용한다는 뜻입니다.

Access-Control-Allow-Methods

서버가 허용하는 HTTP 메서드(GET, POST, PUT 등)를 명시합니다.

Access-Control-Allow-Headers

클라이언트가 요청할 때 사용할 수 있는 헤더를 명시합니다.

Access-Control-Allow-Credentials

클라이언트에서 자격 증명(쿠키나 인증 정보)을 함께 보내는 요청을 허용할지를 명시합니다.

Preflight 요청

CORS는 보통 "Preflight" 요청을 포함합니다. 이 요청은 실제 리소스 요청을 보내기 전에 브라우저가 OPTIONS 메서드를 사용해 서버에 특정 CORS 규칙을 허용하는지 확인하는 요청입니다. Preflight 요청은 특히 클라이언트가 안전하지 않은 메서드(예: POST, PUT)나 사용자 정의 헤더를 포함하는 경우에 발생합니다.

CORS 에러가 발생하는 이유

CORS 에러는 클라이언트가 다른 출처의 리소스에 접근하려고 할 때, 서버가 해당 요청을 허용하지 않을 때 발생합니다. 서버가 적절한 CORS 헤더를 반환하지 않거나, 요청 메서드나 헤더가 허용되지 않으면 브라우저에서 자동으로 요청을 차단합니다.

  • Same Origin Policy(SOP): 기본적으로 다른 출처 간의 상호작용을 차단하여 보안을 강화하는 브라우저 정책.
  • CORS: 서버가 특정 조건하에서 교차 출처 요청을 허용하도록 해 SOP의 제한을 우회하는 방법.
profile
슬기로운개발생활🤖

0개의 댓글