CORS...!

고병표·2022년 4월 26일
0

회고

개발 공부를 하다가 여러 회사에 면접을 보는 중이다. 그 과정속에서 받았던 질문들을 정리하려 한다.

프로젝트중에 파일 전송 및 공유 프로젝트에서 cors 처리란?

파일 전송 및 공유 프로젝트

  • 주어진 URL로 HTTP GET을 보내게 되면 응답헤더에 Access-Control-Allow-Origin 관련 설정이 없어서 CORS 정책이 위반된다.
  • 해결방법은 package.json 설정 파일에 프록시 서버를 따로 구축하여 경유하는 방식으로 해결했다.

cors 처리를 꼭 해 줘야하는 이유

  • CORS는 CSRF라고 불리는 브라우저 취약점 공격으로부터 브라우저 사용자를 보호하기 위해만든 기능이다.
  • CORS에 정책은 서버에 저장되어있고, 저장된 CORS 정책을 브라우저에게 보내주는 일은 서버가 담당하고 있지만, 그 CORS정책을 보내달라고 서버에게 요청하는건 브라우저이다.

처리 과정

  1. 먼저, 브라우저에게 http요청이 발생한다면 브라우저는 발생한 http요청이 CORS검증을 해야하는 상황인지 판단한다.
  2. 보안 정책상 검증이 필요한 상황에 해당하면 CORS 검증을 서버에 요청한다. (Preflight Request)
  3. 서버에게 응답받은 CORS 검증 요청 결과에 따라서 브라우저는 발생한 http요청을 취소시켜버리고 에러를 뱉는다.

만일 어떤 라이브러리나 설정을 통해서 ,CORS 에러를 우회할 수 있는 방법이 있다면, 그것은 브라우저의 보안 취약점이다. 프론트엔드 소스코드만으로는 CORS에러를 우화하는 방법은 없어야한다. => 내가 해결한 방법의 경우 백엔드 개발자 없이 해결해야했기 때문에..

CORS의 배경과 필요성

예전에는 웹 브라우저가 서버에 요청을 하면, 서버에서 완성된 HTML page를 만들어 주는 것이 일반적이었다.

그래서 웹 사이트에서 다른 서버로 요청을 날린다? 하면 개인정보 유출등의 보안적인 행동을 한다고 의심하는 것이 일반적이었다고 한다.

이로인해, 웹 브라우저는 웹 사이트의 요청으로 인해 받은 응답의 서버 도메인이 현재 도메인과 다르면 요청자체를 막아버리는 선택을 하게 된 것이다.

최근에는 웹 사이트에서 할 수 있는 일이 아주 많아졌다.

그러다 보니, 웹 사이트에서 다른 서버로 요청을 보내어 데이터를 받아야 할 수 있는 일도 생겼다.

근데 브라우저 정책상 막혀있으니, 개발자들은 다른 방법을 생각해내었다.

그렇게 나온것이 JSONP이다.

html 스크립트 상에서는 다른 도메인에 대한 요청을 하는 것이 허용되었기 때문이다.

스크립트처럼 실행을 하는데, 사실은 다른 도메인에서 데이터를 받아오는 편법이었던 것이다.

이는 웹브라우저 입장에서는 버그인데.. 버그를 막자니 오히려 역효과가 나올 것같은 분위기가 조성되었고,

결국에 공식적인 방법을 내놓는다.

그렇게 나온것이, CORS이다.
좀 더 자세한 설명 : 링크

0개의 댓글