CORS 정책
Q. CORS 정책이란 무엇인가요?
A. CORS 정책이란 교차 출처 리소스 공유인 Cross-Origin Resource Sharing
의 약자로, 다른 출처에서 리소스를 요청할 때 이를 허용하거나 제한하는 보안 장치입니다. 브라우저는 기본적으로 동일 출처(같은 도메인, 프로토콜, 포트)에서만 데이터를 주고받게끔 되어 있습니다. 만약 다른 출처에서 데이터를 요청하려고 하면, 보안 때문에 그걸 막습니다. 그런데 CORS를 설정하면, 서버에서 "이 특정 도메인은 접근을 허용해도 돼"라고 명시할 수 있게 됩니다.
서버가 클라이언트에 Access-Control-Allow-Origin이라는 헤더를 보내서 허용할 도메인을 지정하는 방식입니다. 이렇게 하면, 브라우저는 그 헤더를 보고 교차 출처 요청을 허용할지 판단합니다.
Q. 그렇다면 비슷한 용어인 SOP는 무엇인가요?
SOP는 Same-Origin Policy
의 약자로, 동일 출처 정책을 의미합니다. 웹 브라우저에서 보안을 위해 기본적으로 사용하는 정책으로 같은 출처(Origin)에서만 자원을 주고받도록 제한하는 규칙이에요.
출처라는 건 프로토콜, 도메인, 포트가 모두 동일한 경우를 말합니다. 예를 들어, https://example.com:443
와 https://example.com:80
는 포트가 다르기 때문에 다른 출처로 간주됩니다.
SOP가 중요한 이유는, 이를 통해 다른 출처의 악의적인 코드가 사용자의 데이터를 훔쳐가는 것을 방지하기 때문입니다. 예를 들어, 브라우저가 악성 스크립트가 포함된 외부 사이트에서 사용자의 쿠키나 데이터를 가져가는 걸 막아줍니다.
정리하자면, SOP는 기본적인 보안 정책으로 같은 출처에서만 자원 교환을 허용하는 거고, CORS는 이 규칙을 완화해서 특정 조건에서 다른 출처의 요청도 허용할 수 있게 하는 방식이라고 할 수 있습니다.
Q. CORS의 작동 방식에 대해서 설명해주세요.
브라우저에서 웹 페이지가 다른 도메인의 리소스를 요청할 때, HTTP 요청 헤더에 Origin 정보가 포함됩니다.
여기서 Origin은 요청을 보낸 페이지의 출처를 나타냅니다.
서버는 Origin 정보를 확인하고 해당 Origin에서의 요청을 허용할지 거부할지 결정합니다.
이를 위해 서버는 응답 헤더에 Access-Control-Allow-Origin을 포함하여 허용할 출처를 명시합니다.
허용하는 출처는 *
를 사용하여 모든 출처를 허용하거나 특정 출처를 명시적으로 지정할 수 있습니다.
브라우저는 서버의 응답을 확인하고, 만약 허용된 출처와 일치한다면 응답을 처리하고 자바스크립트로 데이터를 활용할 수 있습니다.
그렇지 않다면 브라우저는 CORS 에러를 발생시키고 자바스크립트에서 해당 응답을 접근할 수 없게 됩니다.
Last updated