웹 브라우저는 사용자를 보호하기 위해 여러 가지 보안정책을 적용합니다.
그중 가장 기본이 되는 것이 SOP(Same-Origin Policy) 이고, 이를 예외적으로 완화하는 방식이 CORS(Cross-Origin Resource Sharing) 입니다.
1. Origin
브라우저에서 Origin 이란 보통 아래 3가지 조합을 의미합니다.
- 프로토콜(Scheme): http, https
- 호스트(Host): www.test.com, api.test.com, 192.168.0.10
- 포트(Port): 80, 443, 8080
즉, 이 3개가 모두 같아야 같은 Origin 입니다.
예시
이 주소의 Origin은 다음과 같습니다.
- 프로토콜: https
- 호스트: www.test.com
- 포트: 기본적으로 443
같은 Origin
위 둘은 프로토콜, 호스트, 포트가 모두 같으므로 같은 Origin 입니다.
이외의 것은 모두 다른 Origin입니다. (서브도메인, 포트, 프로토콜, IP가 다르면 다른 Origin)
2. SOP (Same-Origin Policy)
SOP는 브라우저의 대표적인 보안정책입니다.
한 웹사이트의 스크립트가 다른 Origin의 데이터에 함부로 접근하지 못하게 막는 정책입니다.
예를 들어 사용자가 www.test.com 에 로그인한 상태라고 하겠습니다.
이때 악성 사이트 www.hacker.com 이 사용자의 브라우저에서 www.test.com 의 민감한 데이터에 자유롭게 접근할 수 있다면 매우 위험합니다.
그래서 브라우저는 기본적으로 다른 Origin 간 데이터 접근을 제한합니다.
대표적으로 다음과 같은 접근이 제한됩니다.
- 다른 사이트의 응답 데이터 읽기
- 다른 Origin의 DOM 접근
- 다른 Origin의 AJAX/fetch 응답 읽기
예를 들어:
- 현재 페이지: https://www.hacker.com
- 요청 대상: https://www.naver.com
브라우저는 요청 자체가 나갈 수는 있어도,
응답 내용을 스크립트가 읽는 것은 차단할 수 있습니다.
브라우저는 다른 사이트 자원 사용을 완전히 금지하지는 않지만,
스크립트가 다른 Origin의 민감한 데이터에 접근하는 것은 SOP로 제한합니다.
3. CORS (Cross-Origin Resource Sharing)
SOP 때문에 기본적으로는 다른 Origin의 응답을 읽을 수 없는데,
서버가 명시적으로 허용하면 예외적으로 읽을 수 있게 하는 방식입니다.
예를 들어:
- 프론트엔드: https://www.test.com
- API 서버: https://api.test.com
둘은 호스트가 다르므로 다른 Origin 입니다.
브라우저에서 www.test.com 의 JS가 api.test.com 에 fetch 요청을 보내면,
브라우저는 응답 헤더를 보고 이 요청이 허용되는지 판단합니다.
서버가 아래처럼 응답하면:
Access-Control-Allow-Origin: https://www.test.com
브라우저는 https://www.test.com 에서 온 요청에 대해 응답을 읽도록 허용할 수 있습니다.
중요한 점은, CORS는 브라우저가 임의로 푸는 것이 아니라 서버가 응답 헤더로 허용해야 동작합니다.
즉 클라이언트 쪽 JS에서 마음대로 “CORS 허용”을 설정할 수 있는 것이 아닙니다.
허용 여부는 결국 응답 서버가 결정합니다.
4. SOP와 CORS 관계
둘의 관계를 정리하면 다음과 같습니다.
SOP
- 기본 보안정책
- 다른 Origin의 데이터 접근을 제한
CORS
- 서버가 허용한 경우에 한해
- SOP 제한을 일부 완화
즉:
SOP가 기본 차단 정책이고, CORS는 예외 허용 정책입니다.
'Web Hacking' 카테고리의 다른 글
| [Web Hacking] Web Trend (0) | 2026.03.13 |
|---|---|
| [Web Hacking] 인코딩 및 Character Set (0) | 2026.03.10 |
| [Web Hacking] HTTP Method (0) | 2026.03.10 |
| [Web Hacking] 요청과 응답 (Request, Response) (0) | 2026.01.30 |
| [Web Hacking] 웹의 작동 원리와 개발 방식 (0) | 2026.01.30 |
댓글