동일 출처 정책(SOP)
Last updated
Last updated
Ajax 프로그래밍으로 웹 개발을 하다보면 기대했던 결과와 달리 브라우저 콘솔 패널에 다음과 같은 오류가 뜰 수 있다.
No 'Access‑Control‑Allow‑Origin' header is present on the requested resource. Origin ‘요청한 도메인' is therefore not allowed access.
Firefox의 경우는 다음 문구로 오류를 출력한다.
교차 출처 요청 차단: 동일 출처 정책으로 인해 [요청한 도메인]에 있는 원격 자원을 차단 하였습니다. (원인: 'Access‑Control‑Allow‑Origin' CORS 헤더가 없음).
No 'Access Control Allow Origin', not allowed access 문구로 보아 "접근을 허용하지 않는다."는 오류를 출력한다. 왜 접근이 막힌 것 일까?
이유는 웹 애플리케이션 보안 모델에서 중요한 개념 중 하나인 "동일 출처 정책(SOP, same-origin policy)" 때문이다. Firefox 오류를 보면 "동일 출처 정책으로 인해"라는 문구를 확인할 수 있다.
SOP는 "동일 출처 정책"으로 한 출처(Origin)에서 로드 된 문서나 스크립트가 다른 출처의 자원과 상호 작용하지 못 하도록 제한 하는 것을 말한다.
이 정책에 의해 XMLHttpRequest 객체로 특정 웹 페이지에 접근할 때, 해당 웹 페이지와 동일한 출처(Same Origin)의 페이지에만 접근이 가능한 것이다. 동일한 출처라고 하는 것은 프로토콜(protocol), 호스트(host), 포트(port)가 같아야 함을 말한다.
즉, 쉽게 말해 웹 페이지 스크립트는 해당 페이지와 동일한 서버에 있는 데이터만 Ajax 비동기 요청하여 처리할 수 있다. 아래 그림은 동일 출처의 데이터 요청(Same-origin requests)과 다른 출처의 데이터 요청(Cross-origin requests)에 대해 말하고 있다. A 서버에 요청한 데이터는 항상 허용(always allowed)되지만, B 서버에 요청한 데이터는 그렇지 않다. (Ajax 요청 시)
프로토콜, 호스트, 포트가 달라, 동일 출처 정책에 의해 차단 되기 때문이다. 크로스 사이트 스크립팅(XSS, Cross-site scripting)은 해킹 이슈가 있어 보안상, 동일 출처 정책(SOP)이 필요한 것이다. 이 정책이 초기에는 웹 사이트의 보안을 위한 좋은 방법으로 생각 되었으나, 최근에는 여러 도메인에 걸쳐 구성되는 대규모 웹 프로젝트가 늘어나고, REST API등을 이용한 외부 호출이 많아지는 상황 이라,서비스 개발에 걸림돌이 되어버렸다.
이 글은 "CORS: 서버(Server) 개발단 해결책"과 내용이 이어진다.
동일 출처 정책(SOP)은 한 서버의 문서가 다른 서버의 자료와 상호작용이 불가능 한 것을 말한다.
왜 SOP가 필요한가? 크로스 사이트 스크립딩과 같은 웹 보안 이슈 때문에 필요하다.
결론, SOP 때문에 작업중인 페이지와 같은 서버에 있는 자료만 Ajax로 비동기 요청이 가능하다.