ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [모의 면접 CS 스터디] CORS, SOP
    CS/네트워크 2024. 1. 24. 22:00

    이 글에서는 CORS와 SOP에 대한 상세한 내용은 다루지 않고 CORS와 SOP를 사용하는 이유에 대해서 주로 살펴볼 겁니다. 자세한 내용을 원하시는 분은 이 글을 참조해주세요

    CORS(Cross-Origin Resource Sharing)

    CORS란 무엇인가?

    CORS란 간단히 말해서 서로 다른 출처(Origin)를 가지는 클라이언트와 서버 간의 데이터 요청과 응답이 이루어지는 것을 말한다. 그렇다면 서로 다른 출처는 무엇을 뜻할까? 도메인의 구조를 보았을 때

     

    protocl에서부터 host 그리고 여기에 더해 포트 번호가 다르면 서로 다른 출처라고 간주한다.

    이를테면  www.example1.com에서 www.example2.com로 요청하거나 www.exmaple1.com:8080에서 www.example1.com:8000으로 요청하는 걸 말한다.

     

    CORS를 왜 기본적으로 지원하지 않는 것일까?

    개발하다보면 프론트 측에서 CORS 이슈로 인해 외부 API를 요청하지 못한다거나 아니면 프론트와 백엔드 서버의 포트번호가 다른 경우 CORS 이슈가 발생하는 경우를 종종 볼 수 있다. 이런 경우 보통 서버 측에서 응답 헤더에 Access-Controll-Allow-Origin이나 Access-Controll-Allow-Credentials 등의 내용을 추가하면 해결이 된다. 하지만 굳이 왜 이런 번거로운 과정을 거쳐서까지 CORS를 막는 걸까? 결론부터 말하면 보안 문제 때문이다. 이에 대해서는 SOP에 대한 배경지식이 필요하다.

     

    SOP(Same-Origin Policy)

     

    SOP란 무엇인가?

    SOP이란 웹 페이지가 동일한 origin을 가지는 서버에 대한 응답에 접근할 수 있는 정책을 의미한다. 이러한 정책이 나온 이유는 한 출처가 다른 출처의 리소스에 접근하지 못하게 하기 위함이다. 본 정책에 따라서 다른 악성 웹 사이트에서 악의적인 스크립트를 이용해 서버에 요청을 보내도 서버의 응답이 돌아와도  웹브라우저에 의해 차단되어 내용을 보진 못한다. CORS란 이러한 SOP 정책에 대한 예외사항이라고 볼 수 있다. 

     

    SOP의 보안적 허점과 이점

     

    SOP은 어디까지나 응답을 막을 뿐이다.

     

    다만 유심히 봐야될 점은 SOP는 어디까지나 서버의 응답을 못 읽게 한다는 것이다. 

     

    이를테면 사용자가 현재 은행 사이트 A의 로그인 되어 있는 상태이고 그런 도중 어떠한 악성 사이트 B에 접근하게 되었다고 가정하자. 이 때 모든 웹브라우저의  웹페이지는 요청 시 쿠키를 공유하기 때문에 B가 다른 웹 페이지의 쿠키에 접근을 하지 못하든 상관없이 B의 요청이 A 사이트의 서버로 전달되어 쿠키에 담긴 세션이나 토큰을 통해 인증이 되어 B의 요청이 그대로 받아들여질 수 있다는 점이다. 이러면 B가 응답을 보진 못하겠지만 어쨌든 원하는 요청을 보내는 건 가능하다.

     

    그래서 흔히 SOP 정책이 CSRF 공격을 방지하기 위해 나왔다는 말이 있지만 근본적으로 SOP는 브라우저 측에서 서버의 응답을 못 보게 할뿐이지 악의적인 요청을 방지하진 못한다. 

     

    그렇다면 SOP가 완전히 보안적으로 무용한가? 그렇진 않다. 적어도 다른 출처의 웹 페이지가 보안에 활용되는 여러 정보들에 접근하는 것은 방지할 수 있다.

    pre-flight request

     

    그리고 매우 특수한 경우를 제외하면 대다수의 경우 브라우저 측에서 Pre-flight request를 보내어 CORS 여부를 체크하기 때문에 이러한 공격을 예방할 수 있다. 위 그림에서 본 요청만 보내서 다른 출처임을 파악하지 않는다면 브라우저 측이 요청을 받든 안 받든 내 계좌에서 돈이 빠져나가겠지만 예비 요청 덕분에 이를 방지할 수 있는 것이다.

     

    출처:

    csrf - Is CORS helping in anyway against Cross-Site Forgery? - Information Security Stack Exchange

    [10분 테코톡] 🌳 나봄의 CORS - YouTube

    CORS는 왜 이렇게 우리를 힘들게 하는걸까? | Evans Library

    Same-origin policy - Wikipedia

    댓글

Designed by Tistory.