SOP & COPS

CHIKA·2024년 7월 15일

SOP (Same Origin Policy) 란?

SOP (Same Origin Policy,동일 출처 정책)는 브라우저가 웹보안을 위해 강제하는 정책으로, 동일한 출처의 리소스만 상호 작용을 허용한다.
즉, 서로 다른 출처에서 로드된 리소스들 간의 상호작용을 제한한다. (로드는 되지만 자바스크립트 접근이 제한된다).

SOP는 프로토콜, 호스트 , 포트 이 세가지 요소가 같아야 같은 출처(Same Origin)로 간주한다.

왜 SOP 정책이 있어야 할까?
CSRF 같은 보안상의 취약점을 막기 위해서이다.

하지만 SOP 제한을 우회해야하는 합법적인 상황이 발생할 수 있다.
이를 위해 사용되는 것이 CORS 이다.


CORS (Cross-Origin Resource Sharing) 란?

CORS (Cross-Origin Resource Sharing, 교차 출처 리소스 공유)는 자신의 출처와 다른 출처의 리소스에 접근할 수 있도록 허용한다. SOP의 제한을 완화하기 위한 방법으로, 서버가 특정 출처에서 오는 요청을 허용할 수 있도록 설정할 수 있다.

CORS 작동방식

  1. 브라우저에서 다른 출처의 리소스를 요청할때 'Origin' 헤더를 포함한다.
  2. 서버는 요청을 받으면 Origin 헤더를 확인하고 요청을 허용할 지 결정한다.
  3. 요청을 허용하면 ACAO 헤더를 포함하여 응답한다.
  4. 브라우저는 서버의 응답을 확인하고, ACAO 헤더가 요청을 보낸 출처와 일치하는지 검증한다.
  5. 일치하면 리소스 접근을 허용하고, 일치하지 않으면 접근을 차단한다.

ACAO (Access-Control-Allow-Origin) 란?

CORS 정책의 핵심 헤더 중 하나로, 서버가 특정 출처에서 오는 요청을 허용할지 여부를 브라우저에 알리는데 사용한다.

  • 특정 출처 허용
Access-Control-Allow-Origin: https://www.example.com

  • 모든 출처 허용
Access-Control-Allow-Origin: *

모든 요청을 허용한다. 하지만 모든 요청을 허용하게 되면 SOP의 의미가 없어져 보안상 취약점이 존재한다.
Access-Control-Allow-Credentials: true 인 경우에는 *(모든 출처 허용)을 사용할 수 없다.


ACAC (Access-Control-Allow-Credentials) 란?

자격 증명(쿠키, 인증 헤더 등)을 포함한 요청을 보낼 수 있도록 서버가 허용할지 여부를 명시한다.
자격 증명을 포함한 요청을 허용하기 위해서는 Access-Control-Allow-Credentia ls: true 를 포함해야하며. 해당 헤더가 있으면 ACAO는 *를 사용하지 못한다.

0개의 댓글