SOP(Same-origin policy)


Origin

Untitled

Origin과 브라우저 동작

  1. HTTP 헤더: 웹 브라우저는 보통 다른 출처의 리소스에 접근할 때 "Origin" 헤더를 포함하여 요청을 보냅니다. 이 헤더는 현재 페이지의 출처를 나타냅니다.
  2. Same-Origin Policy: 웹 페이지의 스크립트가 다른 출처의 리소스에 접근하려면, 두 출처의 Origin이 일치해야 합니다.
  3. Cross-Origin Resource Sharing (CORS): 서버는 "Access-Control-Allow-Origin" 같은 CORS 헤더를 사용하여, 어떤 출처에서의 접근을 허용할지를 명시할 수 있습니다.
  4. Credential Sharing: 쿠키나 HTTP Authentication 같은 credentials를 다른 출처과 공유하려면, 명시적인 서버 설정이 필요합니다. CORS에서는 "Access-Control-Allow-Credentials" 헤더를 사용합니다.
  5. Security Restrictions: 브라우저는 Origin을 기반으로 여러 가지 보안 제한을 적용합니다. 예를 들어, localStorageIndexedDB는 동일한 Origin 내에서만 데이터를 공유할 수 있습니다.
  6. JavaScript APIs: 많은 JavaScript API들, 예를 들어 fetchXMLHttpRequest, postMessage 등도 Origin을 고려합니다. fetchXMLHttpRequest는 CORS 정책을 지키고, postMessage는 명시적으로 메시지를 수신할 대상 Origin을 지정할 수 있습니다.

SOP와 CORS의 상관관계

  1. 기본 보안 수준 설정: SOP가 웹의 기본 보안 수준을 설정합니다. 즉, 어떠한 설정도 하지 않으면 SOP에 따라 다른 출처의 리소스 접근은 기본적으로 제한됩니다.
  2. 보안 완화: CORS는 이러한 SOP의 제약을 명시적으로 완화할 수 있게 해줍니다. 서버가 CORS 헤더를 올바르게 설정하면, 다른 출처에서도 특정 리소스에 안전하게 접근할 수 있습니다.
  3. 브라우저의 역할: 둘 다 브라우저 수준에서 동작하는 정책이며, 브라우저가 이 두 정책을 적절히 조절하여 웹의 보안을 유지합니다.