Same Origin Policy(SOP, 동일 출처 정책)는 웹 보안의 핵심 정책 중 하나로, 브라우저가 서로 다른 출처에서 실행된 문서나 스크립트가 서로의 리소스에 접근하는 것을 방지하는 보안 메커니즘입니다. 이 정책은 웹 페이지 간에 악의적인 데이터 도용을 막기 위해 존재하며, 기본적으로 스크립트가 같은 출처(origin) 내의 리소스에만 접근할 수 있도록 제한합니다.
출처는 세 가지 요소를 기준으로 합니다:
Same Origin Policy는 웹 애플리케이션의 여러 자원에 적용되어 작동합니다:
다른 출처의 웹 페이지가 현재 페이지의 DOM 요소를 직접 접근하거나 수정하는 것을 방지합니다.
각 출처는 자신이 설정한 쿠키에만 접근할 수 있습니다.
AJAX 요청도 같은 출처에서만 가능합니다. 다른 출처로 요청을 보내려면 CORS 정책을 통해 허용해야 합니다.
각 출처는 자신이 설정한 저장소 데이터만 사용할 수 있습니다.
https://example.com/page1 에서 https://example.com/page2 의 DOM 요소나 쿠키에 접근하는 것은 SOP에 의해 허용됩니다.
https://example.com 에서 https://another-example.com 에 있는 데이터를 접근하거나 수정하려고 하면 SOP에 의해 차단됩니다.
CORS(Cross-Origin Resource Sharing)는 브라우저 보안 정책 중 하나로, 웹 애플리케이션이 한 출처에서 실행 중일 때 다른 출처의 리소스에 접근하는 것을 제어하는 방식입니다. 기본적으로, 웹 브라우저는 보안상의 이유로 서로 다른 출처(도메인, 프로토콜, 포트)를 갖는 리소스 간의 요청을 제한합니다. 이때 CORS는 서버가 특정 출처에 대해 리소스 접근을 허용할 수 있는 방법을 제공하는 메커니즘입니다.
CORS는 HTTP 헤더를 통해 동작합니다. 서버는 클라이언트의 요청을 분석한 후, 응답에 특정 HTTP 헤더를 추가해 어떤 출처에서 요청이 허용되는지 명시합니다. 주요 헤더는 다음과 같습니다:
클라이언트 요청이 허용된 출처를 명시합니다. 예를 들어, Access-Control-Allow-Origin: *는 모든 출처의 요청을 허용한다는 뜻입니다.
서버가 허용하는 HTTP 메서드(GET, POST, PUT 등)를 명시합니다.
클라이언트가 요청할 때 사용할 수 있는 헤더를 명시합니다.
클라이언트에서 자격 증명(쿠키나 인증 정보)을 함께 보내는 요청을 허용할지를 명시합니다.
CORS는 보통 "Preflight" 요청을 포함합니다. 이 요청은 실제 리소스 요청을 보내기 전에 브라우저가 OPTIONS 메서드를 사용해 서버에 특정 CORS 규칙을 허용하는지 확인하는 요청입니다. Preflight 요청은 특히 클라이언트가 안전하지 않은 메서드(예: POST, PUT)나 사용자 정의 헤더를 포함하는 경우에 발생합니다.
CORS 에러는 클라이언트가 다른 출처의 리소스에 접근하려고 할 때, 서버가 해당 요청을 허용하지 않을 때 발생합니다. 서버가 적절한 CORS 헤더를 반환하지 않거나, 요청 메서드나 헤더가 허용되지 않으면 브라우저에서 자동으로 요청을 차단합니다.