
SOP - Same Origin Policy
어떤 출처에서 불러온 문서나 스크립트가 다른 출처의 소스와 상호작용할 수 있는 방법을 제한하는 중요한 보안 메커니즘.
CORS - Cross Origin Resource Sharing
추가 HTTP 헤더를 사용하여 한 출처에서 실행 중인 웹 어플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제. 웹 어플리케이션은 리소스가 자신의 출처(도메인, 프로토콜, 포트)와 다를 때 교차 출처 HTTP 요청을 실행한다.
🔗 https://developer.mozilla.org/ko/docs/Web/HTTP/CORS
http 통신을 하면 preflight request를 먼저 날린다. 이 시험요청 때 브라우저는 CORS가 가능한지, 가능하다면 본 요청에서는 어떤 메소드를 사용할 것인지를 헤더에 넣어 보낸다. 만약 CORS 통신이 거절됐으면 다음번 본 요청에서는 백엔드에서 통신을 거절하는 것이 아니라 요청을 날리는 브라우저에서 요청하는 것을 거절한다.
이땐 내 브라우저와 연결되어있는 백엔드에서 대상 백엔드에 요청한다. CORS가 막혀있건 아니건 요청을 막는 것은 브라우저이기 때문에 브라우저-백엔드-백엔드로 요청해서 결과를 받는다. 이때 가운데에서 연결해주는 백엔드를 프록시 서버(대리인 서버)라고 한다.
CORS 막혀있을 때 모바일 어플에서도 통신 가능하다. 오로지 브라우저에서만 제한된다! CORS를 브라우저에서 막는 이유는 브라우저를 보호하기 위함이다. CORS에 대해서 잘 모를 땐 API 요청하면 항상 CORS 요청이 막혔단 응답으로 답답해했었는데 브라우저를 보호하기 위한 정책이라니 뭐든 실상을 알고 봐야한다 ㅋㅋㅋ
CSRF - Cross Site Request Forgery
교차 사이트 요청 위조. 신뢰할 수 있는 사용자를 사칭해 웹 사이트에 원하지 않는 명령을 보내는 공격.
사용자가 로그인을 하게 되면 사용자의 정보가 쿠키에 담기게 되고 이 쿠키는 백엔드와 통신할 때 해당 엔드포인트로 넘겨지게 되는데, CORS가 허용되어있는 사이트에서 해커가 설정해둔 엔드포인트가 같다면 쿠키가 해커에게 넘어가게 된다.
CORS가 막혀있다면 해당 사이트의 백엔드에 해커가 접속해 사용자의 쿠키를 가져올 수 있다.