동일 출처 정책 SOP(Same-Origin-Policy) 란?
● 동일 출처 정책(Same-Origin-Policy)은 어떤 출처에서 불러온 문서나 스크립트가 다른 출처에서 가져온 리소스와 상호작용하는 것을 제한하는 중요한 보안방식이다. 동일 출처 정책은 잠재적으로 해로울 수 있는 문서를 분리해, 공격받을 수 있는 경로를 줄인다.
동일 출처 정책(SOP) 의 필요성
● 인터넷 상의 악의적인 사이트들의 공격들을 막는데 도움이된다.(ex.CSRF, XSS, Clickjacking등의 공격)
Origin 이란?
● origin 은 프로토콜(Protocao,Scheme), 호스트(Host), 포트(Port) 를 합친 것으로 구성되며, 구성요소가 모두 일치해야 동일한 오리진이라고 한다.
예시
http://same-origin.com/ 라는 는 origin과 URL을 비교했을때 결과는 다음과 같다.
URL | 결과 | 이유 |
https://same-origin.com/frame.html | Same Origin | Path만 다름 |
http://same-origin.com/frame.html | Cross Origin | Scheme이 다름 |
https://cross.same-origin.com/frame.html | Cross Origin | Host가 다름 |
https://same-origin.com:1234/ | Cross Origin | Port가 다름 |
SOP 테스트
Same Origin
sameNewWindow = window.open('https://google.com/mail');
console.log(sameNewWindow.location.href);
결과: https://google.com/mail
Cross Origin
crossNewWindow = window.open('https://naver.com');
console.log(crossNewWindow.location.href);
결과: Origin 오류 발생
Cross Origin 데이터 읽기/쓰기
위와 같이 외부 출처에서 불러온 데이터를 읽으려고 할 때는 오류가 발생해 읽지 못한다. 하지만 읽는 것 외에 데이터를 쓰는 것은 문제 없이 동작한다. 아래와 같은 코드는 오류가 발생하지 않습니다.
crossNewWindow = window.open('https://www.naver.com');
crossNewWindow.location.href = "https://www.google.com";
Origin 상속
● about:blank와 javascript: URL은 출처 서버에 대한 정보를 가지고 있지 않는다. 따라서 이런 URL에서 실행하는 스크립트는 해당 URL을 가지고 있는 문서의 출처를 상속한다.
Internet Explorer 예외사항
인터넷 익스플로러(Internet Explorer)는 동일 출처 정책에 두가지 중요한 예외 사항이 있다.
1. 신뢰할 수 있는 사이트
- 양쪽 도메인 모두가 높은 단계의 보안 수준을 가지고 있는 경우 동일 출처 제약을 적용하지 않는다.
2. 포트
- Internet Explorer는 동일 출처 정책 검사에 포트를 포함하지 않습니다. 따라서 http://company.com:81/index.html과 http://company.com/index.html은 동일 출처로 간주하며, 제한을 두지 않습니다.
Orgin 변경
일부 제약이 있긴 하지만 페이지의 출처를 변경하는 것도 가능하다. 스크립트로 document.domain 의 값을 현재 도메인이나 현재 도메인의 상위 도메인으로 변경할 수 있는데, 상위 도메인으로 설정한 경우 (더짧은) 상위 도메인을 동일 출처 검사에 사용한다.
교차 출처 리소스 공유 Cross origin Resource Sharing (CORS)
Same-Origin-Policy 제한 완화
● SOP는 클라이언트 사이드 웹 보안에서 중요한 요소이다. 하지만, 브라우저가 이러한 SOP에 구애 받지 않고 외부 출처에 대한 접근을 허용해주는 경우가 존재한다. 예를 들면, 이미지나 자바스크립트, CSS 등의 리소스를 불러오 는 <img>, <style>, <script> 등의 태그는 SOP의 영향을 받지 않는다.
● 위 경우들 외에도 웹 서비스에서 동일 출처 정책인 SOP를 완화하여 다른 출처의 데이터를 처리 해야 하는 경우도 있다. 예를 들어 특정 포털 사이트가 카페, 블로그, 메일 서비스를 아래의 주소로 운영하고 있다고 합시다. 각 서비스의 Host가 다르기 때문에 브라우저는 각 사이트의 오리진이 다르다고 인식한다.
ex) - 카페 : https://cafe.naver.com - 블로그 : https://blog.naver.com
- 메일 : https://mail.naver.com
- 메인 : https://naver.com
● 위와 같은 상황에서 자원을 공유하기 위해 사용할 수 있는 공유 방법을 교차 출처 리소스 공유 (Cross Origin Resource Sharing, CORS)라고 한다. 교차 출처의 자원을 공유하는 방법은 CORS와 관련된 HTTP 헤더를 추가하여 전송하는 방법을 사용합니다. 이 외에도 JSON with Padding (JSONP) 방법을 통해 CORS를 대체할 수 있다.
Cross Origin Resource Sharing (CORS)
교차 출처 리소스 공유 (Cross Origin Resource Sharing, CORS)는 HTTP 헤더에 기반하여 Cross Origin 간에 리소스를 공유하는 방법이다. 발신측에서 CORS 헤더를 설정해 요청하면, 수신측에서 헤더를 구분해 정해진 규칙에 맞게 데이터를 가져갈 수 있도록 설정한다.
'Web Hacking > Web' 카테고리의 다른 글
취약점 관리 할 때 알아두면 도움 되는 사이트 10 (0) | 2022.07.13 |
---|---|
XSS (Cross-Site-Scripting) (0) | 2022.07.07 |
BurpSuite 사용시 유용한 단축키 모음 (0) | 2022.07.07 |
Cookie & Session (0) | 2022.07.05 |
WEB (0) | 2022.07.04 |