728x90
728x90

Same Origin Policy

한 출처로 로드된 문서 또는 스크립트가 다른 출처의 리소스와 상호 작용을 제한하는 보안 메커니즘

 

쿠키에는 인증 정보가 보관되며, 브라우저 내부에 저장됩니다. 그리고 웹 서비스에 접속할 때 브라우저는 쿠키를 헤더에 포함시켜 요청을 보냅니다. 이 덕분에 우리는 한 번 로그인하면 일정 기간동안 로그인하지 않고 바로 서비스를 사용할 수 있습니다.

 

하지만 이용자가 악의적인 페이지를 접속했을 때, 페이지가 자바스크립트를 사용해 SNS 웹 서비스로 요청을 보낸다면 브라우저는 헤더에 해당 웹 서비스 쿠키를 포함시킬 것이고 페이지는 로그인 된 이용자의 SNS로 응답을 받을 것입니다. 이렇게 되면 해커는 마음대로 페이지 사용자의 SNS에 글을 올리거나, 삭제하고, SNS 메신저를 읽는 것이 가능하게 될 것입니다.

이와 같은 문제를 방지하기 위해 동일 출처 정책, Same Origin Policy (SOP) 보안 메커니즘이 탄생했습니다.

Origin

URL구조

URL 구조에서 프로토콜 (Protocol, Scheme), 호스트 (Host), 포트 (Port)가 같으면 Same Origin

https://caffeine-melon.tistory.com의 경우

Scheme : "https:"

host: "caffeine-melon.tistory.com"
port: "443"

URL 결과 이유
https://caffeine-melon.tistory.com/manage/ Same Origin /manage/          Path만 다름
http://same-origin.com/frame.html Cross Origin "https" != "http"  Scheme 다름
https://cross.same-origin.com Cross Origin caffeine-melon.tistory.com !=
cross.same-origin.com         Host 다름
https://caffeine-melon.tistory.com:1234 Cross Origin 443 != 1234        Port 다름

 

Same Origin Policy은 같은 Origin일 경우에만 리소스를 요청하고 사용할 수 있습니다.


Cross Origin Resource Sharing (CORS)

Origin이 다르더라도 서로 리소스를 공유해야하는 상황이 생기기 마련이다.

예를 들어 수신한 메일의 개수를 메인 페이지에 출력하려면 메인 페이지(https://www.naver.com)에서 메일 서비스(https://mail.naver.com)에 관련된 리소스를 요청해야 한다.

이 때, 두 사이트는 오리진이 다르므로 SOP를 적용받지 않고 리소스를 공유할 방법이 필요합니다.

 

CORS는 HTTP 헤더에 기반하여 Cross Origin 간에 리소스를 공유하는 방법입니다. 발신측에서 CORS 헤더를 설정해 요청하면, 수신측에서 헤더를 구분해 정해진 규칙에 맞게 데이터를 가져갈 수 있도록 설정합니다.


참고문헌

mozilla - Same-origin policy

mozilla - Cross Origin Resource Sharing

728x90
728x90

'해킹' 카테고리의 다른 글

sql injection  (0) 2023.04.01
SSTI 취약점  (0) 2022.01.11
Cross Site Scripting (XSS)  (0) 2021.12.22
OWASP top 10 / 2021 업데이트 한글 번역  (0) 2021.11.22
구글 도크 (Feat. 디렉토리 리스팅)  (0) 2021.10.14