SOP (Same Origin Policy,동일 출처 정책)는 브라우저가 웹보안을 위해 강제하는 정책으로, 동일한 출처의 리소스만 상호 작용을 허용한다.
즉, 서로 다른 출처에서 로드된 리소스들 간의 상호작용을 제한한다. (로드는 되지만 자바스크립트 접근이 제한된다).
SOP는 프로토콜, 호스트 , 포트 이 세가지 요소가 같아야 같은 출처(Same Origin)로 간주한다.
왜 SOP 정책이 있어야 할까?
CSRF 같은 보안상의 취약점을 막기 위해서이다.
하지만 SOP 제한을 우회해야하는 합법적인 상황이 발생할 수 있다.
이를 위해 사용되는 것이 CORS 이다.
CORS (Cross-Origin Resource Sharing, 교차 출처 리소스 공유)는 자신의 출처와 다른 출처의 리소스에 접근할 수 있도록 허용한다. SOP의 제한을 완화하기 위한 방법으로, 서버가 특정 출처에서 오는 요청을 허용할 수 있도록 설정할 수 있다.
CORS 정책의 핵심 헤더 중 하나로, 서버가 특정 출처에서 오는 요청을 허용할지 여부를 브라우저에 알리는데 사용한다.
Access-Control-Allow-Origin: https://www.example.com
Access-Control-Allow-Origin: *
모든 요청을 허용한다. 하지만 모든 요청을 허용하게 되면 SOP의 의미가 없어져 보안상 취약점이 존재한다.
Access-Control-Allow-Credentials: true 인 경우에는 *(모든 출처 허용)을 사용할 수 없다.
자격 증명(쿠키, 인증 헤더 등)을 포함한 요청을 보낼 수 있도록 서버가 허용할지 여부를 명시한다.
자격 증명을 포함한 요청을 허용하기 위해서는 Access-Control-Allow-Credentia ls: true 를 포함해야하며. 해당 헤더가 있으면 ACAO는 *를 사용하지 못한다.