Same Origin Policy란? — 브라우저 보안의 기초 완전 정리

Same Origin Policy
웹 보안 개념 · 완전 정리 · 2026.03.22
Same Origin Policy란?
브라우저 보안의 기초 완전 정리
🔐 웹 보안 핵심 개념 ✅ 실제 공격 시나리오 포함 💡 CORS 차이점까지
작성: 슬기로운 정보생활 2026년 3월 22일 카테고리: 웹 보안 · 브라우저 · 개발 기초
🔐 Same Origin Policy — 한 문장으로 설명하면

Same Origin Policy(동일 출처 정책, SOP)는 브라우저가 적용하는 핵심 보안 규칙으로, "웹 페이지는 자신과 같은 출처(Origin)의 리소스에만 접근할 수 있다"는 원칙입니다.

쉽게 말해, 내가 bank.com에 로그인해서 탭을 열어두고 있다면, 같은 브라우저에서 열린 evil.combank.com의 데이터나 쿠키를 몰래 읽지 못하도록 막는 것이 SOP입니다. 이 정책이 없다면 악의적인 웹사이트가 사용자의 다른 탭에 열린 인터넷뱅킹, SNS, 이메일의 데이터를 자유롭게 가져갈 수 있습니다.

정식 명칭
Same Origin Policy
동일 출처 정책
적용 주체
브라우저
서버가 아닌 클라이언트 측 보안
목적
교차 출처 공격 차단
크로스 사이트 데이터 도용 방지
도입 시기
Netscape 2.0~
1995년경, 웹 초창기부터 적용
우회 취약점
CVE-2026-20643
iOS 26.3.1 (a)로 패치됨
합법적 우회 방법
CORS
서버가 명시적으로 허용
💡 핵심 비유: SOP는 아파트 보안 시스템과 같습니다. 101호(bank.com)의 열쇠를 가진 사람은 101호에만 들어갈 수 있고, 옆집 201호(evil.com)의 열쇠로는 절대 들어올 수 없습니다. 브라우저가 이 문지기 역할을 자동으로 해주는 것이 SOP입니다.
🔍 'Origin(출처)'의 정확한 정의

SOP를 이해하려면 먼저 Origin이 정확히 무엇인지 알아야 합니다. Origin은 URL에서 딱 세 가지 요소의 조합입니다.

Origin = 프로토콜(Protocol) + 도메인(Domain) + 포트(Port)

예: https://www.bank.com:443
→ 프로토콜: https / 도메인: www.bank.com / 포트: 443

이 세 가지 중 하나라도 다르면 다른 Origin으로 판단하고 접근을 차단합니다. 도메인이 같아도 프로토콜이나 포트가 다르면 다른 출처입니다.

✅ 같은 Origin vs ❌ 다른 Origin 비교
기준 URL: https://www.bank.com같은 Origin ✅
URLhttps://www.bank.com/login✅ 같음
URLhttps://www.bank.com/api/balance✅ 같음
이유프로토콜·도메인·포트 모두 동일. 경로(path)만 달라도 같은 Origin.
기준 URL: https://www.bank.com다른 Origin ❌
URLhttp://www.bank.com❌ 다름
이유프로토콜 다름 (https ≠ http)
URLhttps://api.bank.com❌ 다름
이유서브도메인 다름 (www ≠ api)
URLhttps://www.bank.com:8080❌ 다름
이유포트 다름 (443 ≠ 8080)
URLhttps://www.evil.com❌ 다름
이유도메인 자체가 다름
🚨 SOP가 없다면 — 실제 공격 시나리오

SOP가 없는 세상에서 어떤 일이 벌어지는지 구체적으로 살펴봅니다.

시나리오 1 — 로그인 쿠키 탈취
💀 SOP 없을 때 공격 흐름
사용자 bank.com 로그인 (탭1) 쿠키 저장됨
사용자 evil.com 방문 (탭2) → fetch('https://bank.com/api') 쿠키 포함 요청!
evil.com 응답 데이터 수신 (잔액, 개인정보 등) 공격자 서버 전송
SOP가 있으면: evil.com이 bank.com API에 요청은 보낼 수 있지만, 브라우저가 응답을 evil.com의 JavaScript에 전달하지 않습니다. 응답을 읽을 수 없으므로 공격 불가능.
시나리오 2 — 다른 탭 DOM 접근
💀 iframe을 통한 다른 사이트 내용 탈취 시도
evil.com iframe으로 bank.com 삽입 → contentDocument 접근 시도
SOP가 있으면: iframe 안의 bank.com DOM에 접근 시 브라우저가 "SecurityError: Blocked a frame with origin evil.com from accessing a cross-origin frame" 오류를 발생시킵니다.
시나리오 3 — CVE-2026-20643 (실제 사례)
⚠️ iOS 26.3.1 (a)로 패치된 실제 취약점
악의적 웹 콘텐츠 → Navigation API 오류 악용 SOP 우회 성공
공격자 다른 탭 데이터 접근 (로그인 세션·쿠키)
iOS WebKit의 Navigation API에서 입력값 검증 오류로 SOP를 우회할 수 있는 크로스 오리진 이슈가 발견됐습니다. 2026년 3월 17일 iOS 26.3.1 (a) 업데이트로 수정됐습니다. 이것이 바로 SOP 취약점이 얼마나 치명적인지를 보여주는 실제 사례입니다.
✅ SOP가 허용하는 것 vs 차단하는 것

SOP는 모든 크로스 오리진 활동을 막지는 않습니다. 필요한 것은 허용하고, 위험한 것만 차단합니다.

행위SOP 적용설명
크로스 오리진 쓰기
링크, 리다이렉트, form 전송
✅ 허용 다른 사이트로 이동하거나 폼을 전송하는 건 허용. 단, 응답을 읽을 수 없음.
크로스 오리진 삽입
img, script, link, iframe 태그
✅ 허용 외부 이미지·스크립트·스타일시트 불러오기는 허용. CDN, 구글 폰트 등이 작동하는 이유.
크로스 오리진 읽기
fetch, XHR 응답 내용
❌ 차단 요청은 보낼 수 있지만 응답 내용을 JavaScript로 읽는 것을 차단. 핵심 보호 대상.
크로스 오리진 DOM 접근
iframe contentDocument
❌ 차단 다른 출처 iframe의 DOM 구조나 내용 접근 차단.
크로스 오리진 쿠키 읽기 ❌ 차단 다른 출처 사이트의 쿠키를 JavaScript로 읽는 것 차단.
CORS 헤더가 있는 API 요청 ✅ 허용 (조건부) 서버가 명시적으로 허용한 경우 크로스 오리진 응답 읽기 가능. → CORS 참고
💡 왜 img 태그는 허용되나요? 외부 이미지나 CDN 스크립트 불러오기를 막으면 웹 생태계 자체가 동작하지 않습니다. 구글 폰트, Bootstrap CDN, 외부 광고 이미지 등 웹의 99%가 크로스 오리진 리소스를 사용합니다. SOP는 이런 "단방향 삽입"은 허용하되, 그 내용을 "읽어오는 행위"만 차단합니다.
🌐 CORS — SOP의 합법적 예외

현대 웹 개발에서는 프론트엔드(예: app.example.com)와 백엔드 API(예: api.example.com)가 다른 Origin인 경우가 많습니다. 이때 SOP를 우회하는 합법적인 방법이 CORS(Cross-Origin Resource Sharing)입니다.

CORS의 원리: 서버가 HTTP 응답 헤더에 "이 Origin에서 오는 요청은 허용한다"고 명시하면, 브라우저가 그 응답을 JavaScript에 전달해줍니다. 서버가 허락한 경우에만 SOP 예외가 적용됩니다.
CORS 허용 헤더 예시
# 서버 응답 헤더 (Node.js/Express 예시) Access-Control-Allow-Origin: https://app.example.com Access-Control-Allow-Methods: GET, POST, PUT Access-Control-Allow-Headers: Content-Type, Authorization # 모든 Origin 허용 (주의: 민감한 API에서는 사용 금지) Access-Control-Allow-Origin: *
SOP vs CORS 차이점
구분SOPCORS
역할크로스 오리진 접근 차단크로스 오리진 접근 허용 (조건부)
적용 주체브라우저 (자동 적용)서버 (명시적 설정 필요)
설정 필요없음 (기본 동작)서버에서 헤더 설정 필요
목적기본 보안 유지API 서버가 허용한 출처에 접근 허용
관계원칙 (Rule)예외 (Exception)
⚠️ 주의: Access-Control-Allow-Origin: *으로 모든 출처를 허용하면 SOP의 보호를 사실상 무력화합니다. 민감한 API(인증, 결제, 개인정보)에는 절대 사용해서는 안 됩니다. 허용할 Origin을 구체적으로 명시하는 것이 원칙입니다.
🛠️ 개발자가 알아야 할 합법적 우회 기법

CORS 외에도 개발 현장에서 사용하는 합법적인 크로스 오리진 통신 방법들이 있습니다.

기법용도특징
CORS REST API 크로스 오리진 호출 가장 표준적인 방법. 서버 측 헤더 설정만으로 적용.
postMessage 다른 출처 iframe·윈도우 간 메시지 전달 양측이 명시적으로 메시지를 주고받는 방식. 이벤트 기반.
JSONP 구형 브라우저 크로스 오리진 데이터 요청 보안 취약점 있음. CORS 지원 이전 방법. 현재는 사용 지양.
Proxy 서버 개발 환경에서 CORS 문제 우회 프론트엔드가 같은 출처의 프록시 서버를 통해 API 호출. Vite·CRA에서 지원.
document.domain 같은 최상위 도메인의 서브도메인 간 통신 보안 위험으로 현대 브라우저에서 폐기 예정.
❓ 자주 묻는 질문
SOP는 서버에서 설정하는 건가요?
아닙니다. SOP는 브라우저가 자동으로 적용하는 정책입니다. 서버는 아무것도 설정하지 않아도 되며, 오히려 브라우저가 크로스 오리진 응답을 JavaScript에 넘겨주지 않는 방식으로 구현됩니다. 서버 설정이 필요한 것은 SOP의 예외를 허용하는 CORS입니다.
Postman이나 curl로는 크로스 오리진 요청이 되는데 왜 브라우저에서는 막히나요?
SOP는 브라우저에만 적용되는 정책입니다. Postman, curl, Node.js 서버는 브라우저가 아니기 때문에 SOP의 영향을 받지 않습니다. 브라우저에서만 악의적인 웹사이트가 다른 사이트의 쿠키나 세션을 활용한 공격이 가능하기 때문에, 브라우저 레벨에서 SOP가 적용됩니다.
localhost:3000과 localhost:8080은 같은 Origin인가요?
아닙니다. 포트가 다르면 다른 Origin입니다. 개발 환경에서 프론트엔드(localhost:3000)와 백엔드 API(localhost:8080)를 동시에 실행할 때 CORS 오류가 발생하는 이유가 이것입니다. 이 경우 백엔드에서 CORS 헤더를 설정하거나, 개발 서버(Vite, CRA 등)의 프록시 기능을 사용해 해결합니다.
SOP를 완전히 끄는 방법이 있나요?
Chrome에서 --disable-web-security 플래그를 사용하면 SOP를 비활성화할 수 있지만, 절대 일반 사용 환경에서 사용해서는 안 됩니다. 개발 테스트 목적의 격리된 환경에서만 사용해야 하며, 이 옵션을 켠 상태로 일반 웹 브라우징을 하면 심각한 보안 위협에 노출됩니다. 실무에서는 CORS 설정이나 개발 서버 프록시로 해결하는 것이 옳습니다.
iOS에서 Chrome을 사용해도 CVE-2026-20643 취약점의 영향을 받나요?
네, 영향을 받습니다. iOS와 iPadOS에서는 Chrome, Firefox 등 모든 서드파티 브라우저가 내부적으로 WebKit 엔진을 사용해야 한다는 애플 정책이 있습니다. CVE-2026-20643은 WebKit의 취약점이므로 Safari뿐 아니라 iOS 위의 모든 브라우저에 영향을 줍니다. iOS 26.3.1 (a) 업데이트로 이 문제가 수정됐습니다.
✅ 결론

Same Origin Policy는 웹 보안의 가장 기본적이면서도 가장 중요한 방어선입니다. 이 하나의 정책이 없다면 브라우저는 악의적인 사이트가 마음대로 다른 탭의 데이터를 읽을 수 있는 위험한 환경이 됩니다.

개발자에게는 CORS 오류를 만날 때마다 "이것은 내 코드의 버그가 아니라 브라우저가 나를 보호하고 있는 것"이라고 이해하는 것이 중요합니다. CVE-2026-20643 사례가 보여주듯 SOP를 우회하는 취약점은 즉시 긴급 패치가 이루어질 만큼 치명적입니다. 그만큼 이 정책이 웹 생태계 전체에서 얼마나 중요한 역할을 하는지를 방증합니다.

📅 웹 보안·Apple 관련 주목 일정
3월 23일 전후
iOS 26.4 공식 출시 — CVE-2026-20643 패치 포함
iOS 26.3.1이 아닌 이전 버전 사용자도 이번 업데이트에서 동일 패치 적용
iOS 26.5 이상
RCS 종단간 암호화 도입 예정
안드로이드 ↔ 아이폰 크로스 플랫폼 메시지 iMessage급 보안으로 업그레이드
2026년 6월
WWDC 2026 — iOS 27 최초 공개
차기 WebKit·Safari 보안 기능 업데이트 발표 예상
⚠️ 안내: 본 포스팅은 2026년 3월 22일 기준 공개된 웹 표준 및 브라우저 보안 문서를 바탕으로 작성된 교육·정보 제공용 자료입니다. 보안 취약점 관련 최신 정보는 CVE 데이터베이스(cve.mitre.org) 및 각 브라우저 공식 보안 공지에서 확인하시기 바랍니다.

댓글 쓰기