동일 출처 정책(Same Origin Policy)

2022. 7. 7. 04:49·보안/웹·모바일

공부 사이트: dreamhack web

거의 클라이언트 사이드 공격은 SOP을 우회하기 위한 것

 

SOP의 Origin 구분 방법

Origin = Protocol(Scheme) + Port + Host

 

Ex

Origin: https://so106037.tistory.com/manage/newpost

URL 1:  http://so106037.tistory.com/manage/newpost 

  • [Scheme가 다르다.]

URL 2:  https://hihi.so106037.tistory.com/manage/newpost 

  • [Host가 다르다.]

URL 3:  https://so106037.tistory.com:9999 

  • [Port가 다르다.]

 

SOP는 CrossOrigin이 아닌 SameOrigin일 때만 정보를 읽을 수 있도록 한다.

  • SameOrigin: 현재 페이지와 동일한 출처
  • CrossOrigin: 현재 페이지와 다른 출처

외부 출처에서 불러온 데이터를 읽으려고 할 때는 오류가 발생하여 읽을 수 없음.

그러나 읽는 것이 아닌, 데이터를 쓰는 것은 동작한다.

 

 

그런데 SOP의 영향을 받지 않는 태그가 있다?!

<img> <style> <script>

외에도 SOP을 완화하여 다른 출처의 데이터를 처리해야 하는 경우가 존재함

  • 특정 포털 사이트가 카페/블로그/메일 서비스를 다음과 같이 운영하는 경우
    • https://cafe.naver.com
    • https://blog.naver.com
    • https://mail.naver.com
    • https://naver.com

host가 다르기 때문에 Origin이 다르다고 인식함.

이 때 다른 호스트의 주소의 데이터를 메인 페이지(naver.com)에서 처리하려는 경우...

개발자는 메인 페이지에서 타 호스트의 주소에 관련된 리소스를 요청하도록 해야함.

SOP 적용받지 않고 리소스 공유.

 

▶ 교차 출처 리소스 공유(Cross Origin Resource Sharing, CORS)

CORS와 관련된 HTTP 헤더를 추가하여 전송하는 방법 사용.

 

이 외에도 JSONP(JSON with Padding) 방법 존재함.


CORS

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

JSONP

  • img, js, css 등의 리소스는 SOP에 구해받지 않고 외부 출처에 대한 접근을 허용한다는 특징을 이용
  • <script> 태그로 Cross Origin의 데이터를 불러오는 방식
  • Callback 함수를 이용해야 함. <script> 태그 내에서는 데이터를 js 코드로 인식하기 때문.
  • CrossOrigin에 요청 시 callback 파라미터에 "받아오는 데이터를 어떤 함수로 핸들링 할 것인지" 를 인자로 넘겨준다.
  • 그럼 대상 서버가 전달된 Callback 으로 데이터를 감싸서 응답.
  • https://URL~?callback=myCallback
  • 그러나 CORS 이전에 생긴 것. 이제는 CORS를 쓴다.

 

 

 

 

저작자표시 (새창열림)

'보안 > 웹·모바일' 카테고리의 다른 글

CSRF(Cross-Site Request Forgery)  (0) 2022.07.07
XSS(Cross-Site Scripting) 기초 공부  (0) 2022.07.07
HTTP 프로토콜의 특성  (0) 2022.07.07
TIP: mysql 콘솔에서 한글 깨짐 해결  (0) 2022.07.04
하루만에 mysql root계정 패스워드 까먹었을 때  (0) 2022.07.01
'보안/웹·모바일' 카테고리의 다른 글
  • CSRF(Cross-Site Request Forgery)
  • XSS(Cross-Site Scripting) 기초 공부
  • HTTP 프로토콜의 특성
  • TIP: mysql 콘솔에서 한글 깨짐 해결
병뚜
병뚜
열정!
  • 병뚜
    열려라 뚜껑
    병뚜
  • 전체
    오늘
    어제
    • all (372)
      • 일상X사랑X돈 (0)
        • 보안이슈 (114)
        • 뜨거운감자 (9)
        • 맛집 (2)
        • 혼잣말 (16)
      • 보안 (87)
        • 웹·모바일 (46)
        • 인프라 (19)
        • 리버싱 (8)
        • Security-Gym (10)
        • 리뷰 (4)
      • 프로그래밍 (66)
        • python (14)
        • java (12)
        • js (40)
      • System (47)
        • OS (14)
        • 침투 (33)
      • Play (20)
        • wargame (20)
      • 기타 (10)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로세스
    리버싱
    kisa
    정보보호
    윈도우인터널스
    파이썬공부
    혼공
    랜섬웨어
    커널디버깅
    파이썬초보
    공급망공격
    파이썬입문
    보안이슈
    자바스크립트 상속
    혼공학습단
    혼공단
    보안뉴스
    혼공파
    리버싱초보
    windows internals
    드림핵리버싱
    it이슈
    IT뉴스
    악성코드
    정보보안
    파이썬
    혼자공부하는파이썬
    정보보안교육
    뉴스요약
    jwt
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
병뚜
동일 출처 정책(Same Origin Policy)
상단으로

티스토리툴바