SOP

김기훈·2023년 2월 21일

CS지식

목록 보기
5/10

SOP (Same-Origin Policy, 동일 출처 정책)

동일 출처 정책은 어떤 출처에서 불러온 문서나 스크립트가 다른 출처에서 가져온 리소스와 상호작용하는 것을 제한하는 중요한 보안 방식이다. 동일 출처 정책은 잠재적으로 해로울 수 있는 문서를 분리함으로써 공격받을 수 있는 경로를 줄여준다.

즉, 동일 출처 정책은 웹 브라우저 보안을 위해 프로토콜, 호스트, 포트가 동일한 서버로만 ajax 요청을 주고 받을 수 있도록 한 정책이다.

만약 동일 출처 정책이 없었다면 CSRF 공격 같은 다양한 공격에 취약할 수 있다.

프로토콜, 호스트, 포트?

현재 페이지의 프로토콜과 호스트, 포트를 확인하는 방법은 간단하다. 개발자 도구를 열고 locataion을 입력하면

위와 같이 해당 브라우저 페이지의 프로토콜, 호스트, 포트와 함께 '브라우저 위치 혹은 주소'와 관련된 정보를 확인할 수 있다.

다시 말해 동일 출처 정책이란 같은 Origin 출처의 서버로만 요청을 주고 받을 수 있다는 것이다.
(여기서 origin이란 요청을 보낸 도메인을 의미한다.)

cross-origin이란?

cross-origin이란 다음 중 한 가지라도 다른 경우를 말한다.

  • 프로토콜 - http와 https는 프로토콜이 다르다.
  • 도메인 - domain.com과 other-domain.com은 다르다.
  • 포트 번호 - 8080포트와 3000포트는 다르다.

CSRF 공격(Cross Site Request Forgery)이란?

크로스 사이트 요청위조라고 부르며 XSS와는 다르게 사용자의 인증된 세션을 악용하여 공격하는 방식이며 인터넷 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 만드는 공격이다.

CSRF를 통해 해커는 희생자의 권한을 도용하여 중요 기능을 실행하는 것이 가능하다. 예를들면, 페이스북에 희생자의 계정으로 광고성 글을 올리는 것이 가능해 진다.

CSRF는 해커가 사용자의 컴퓨터를 감염시키거나 페이스북 서버를 해킹을 해서 이뤄지는 공격은 아니기 때문에 다음 조건이 만족되어야 한다.

  1. 위조 요청을 전송하는 서비스(페이스북)에 희생자가 로그인 상태
  2. 해커가 만든 피싱 사이트에 접속

동일 출처 정책의 변화

동일 출처 정책은 월드 와이드 웹의 초창기 구조로 오늘날 우리가 알고 있는 인터넷은 폭발적으로 성장했으며 이 다양성과 변화를 지원하기 위해 동일 출처 정책도 확장하고 적응해야 했다.

1.XmlHTTPRequest

웹을 더 풍부하게 만들기 위해 HTTP 통신을 할 수 있도록 하는 API.
매번 새로운 페이지를 로드할 필요가 없도록 리소스 간의 비동기 통신을 가능하게 합니다.

통신할 때 발생할 수 있는 잠재적인 위험을 감안할 때 XmlHTTPRequest는 동일 출처 정책 규칙을 엄격하게 적용해야 하는 영역이기에 동일 출처 정책의 요구사항이 완전히 적용되었다.

다른 출처 사이트로 호출할 수는 있었지만, 응답을 읽을 수 없다.
(요청 URL이 같은 출처에 있다면 응답을 읽을 수 있다.)

(Axios는 XmlHTTPRequest를 사용하여 발명되었다.)

2.JSONP

JSONP는 HTML의 script 요소로부터 요청되는 호출에는 보안상 정책이 적용되지 않는다는 점을 이용한 우회 방법이다.

script 요소는 src를 호출한 결과를 javascript를 불러와서 포함시키는 것이 아니고 실행시키는 태그이기 때문에 호출 후 즉시 실행하는 점을 이용하여 응답으로 온 Text Type의 결과를 javascript로 인식하여 바로 실행하게 한다.

알아두어야 할 중요한 것은 응답 데이터는 Text형 이란 것과, callback 함수명으로 감싸진다는 점이다.

JSONP로 만든 외부 출처와의 통신은 단방향이며 읽기 전용이라는 문제가 있다.

JSONP 요청이 실행되면 JS는 해당 리소스에서 반환된 모든 항목을 신뢰할 수 있다고 가정하기 때문에 보안 위험을 초래할 수 있다.

3.CORS

CORS는 추가 HTTP 헤더를 사용하여, 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제이다.
즉, Same-Origin Policy의 문제점을 해결하기 위한 정책인 만큼 CORS란 출처가 다른 도메인에서의 AJAX요청이라도 서버 단에서 데이터 접근 권한을 허용하는 정책이다.

profile
평생 공부하기

0개의 댓글