항해99

항해99 36일차 TIL1 - SOP

자몽포도 2023. 1. 17. 11:07

SOP란?

Same Origin Policy란 같은 출처에서만 리소스를 공유할 수 있다”라는 규칙을 가진 정책입니다. 

 

SOP가 생긴 배경에는 보안이 빠질 수 없습니다.

 

이런 상황 속에서 다른 출처의 어플리케이션이 서로 통신하는 것에 대해 아무런 제약도 존재하지 않는다면, 악의를 가진 사용자가 소스 코드를 쓱 구경한 후 CSRF(Cross-Site Request Forgery) XSS(Cross-Site Scripting)와 같은 방법을 사용하여 여러분의 어플리케이션에서 코드가 실행된 것처럼 꾸며서 사용자의 정보를 탈취하기가 너무나도 쉬워진다.

 

CORS는 왜 이렇게 우리를 힘들게 하는걸까? 내용 발췌

 

 

모든 리소스가 SOP 적용 대상은 아닙니다.

 

주요 SOP 적용 대상

  • Ajax(XMLHttpRequest, XHR)
  • Fetch API

 


같은 출처(Origin)란?

프로토콜(스키마), 호스트, 포트가 동일한 출처를 같은 출처라고 합니다.

http://jsmtmt.shop:3000/Users/1

요점만 말하면 http://jsmtmt.shop:3000 까지 동일해야 같은 출처입니다.

http = 프로토콜 jsmtmt.shop = 호스트, 3000 = port 입니다.

 

아래 출처를 통해 예시들의 출처 동일 유무를 판단해보겠습니다.

http://jsmtmt.shop

 

1. http://jsmtmt.shop:3000

포트의 동일 유무를 확인할 수 없습니다. 동일 출처인지 판단할 수 없습니다.

(대부분의 웹 사이트에서 포트는 생략되어 있습니다. 생략된 포트가 3000이 아닐수도 있습니다.)

 

2. http://jsmtmt.com

호스트가 일치하지 않습니다. 다른 출처입니다.

 

3. https://jsmtmt.shop

프로토콜이 일치하지 않습니다. 다른 출처입니다.

 

 


SOP 완화 CORS 

프론트 서버, 백앤드 서버는 같은 출처가 아니기에 프론트와의 협업을 시작하면서 SOP, CORS에 관심을 가질 수 밖에 없게 되었습니다.

  • Ajax(XMLHttpRequest, XHR)
  • Fetch API

위 방식을 제외하고 프론트와 소통하기는 어렵습니다. CORS는 SOP 예외라고 보면 됩니다. 다른 출처에 대해 리소스를 허락한다는 것입니다. 하지만 제약 사항이 있습니다.

 

 

저희 팀은 현재 CORS 제약을 제대로 지키지 않아 프론트 단에서 쿠키 값을 응답으로 받지만 설정?하지는 못하는 문제에 직면했어요...ㅎㅎ CORS에 대해서는 다음 TIL에 포스팅하겠습니다.