
개발 하다보면 프론트랑 백을 연결하는 과정에서 cors에러가 나기 쉽상이다. 대체 cors가 뭐길래 이렇게 귀찮게 구는것일까?
Cross-Origin Resource Sharing(교차 출처 리소스 공유) 약자입니다.
웹 브라우저에서 실행되는 웹 애플리케이션에서 다른 도메인으로 리소스를 요청하는 기술입니다. 엡 애플리케이션은 동일 출처 정책에 따라 다른 출처로 AJAX요청을 제안합니다.
cors는 서버에서만 막는것이 아닌 기본적으로 우리가 많이 사용하는 chrome 즉 브라우저단에서 먼저 막습니다. 중요한 보안 상항이기 때문에 한 출처의 리소스에 접근하는것을 다른 출처의 리소스에 접근하는것과 구분해서 처리합니다.
cors설정은 서버 사이드에서 이뤄지며, 일반적으로 HTTP응답(response) 헤더를 통해 이루어집니다.
Access-Control-Allow-Origin: 허용된 출처(도메인)의 목록을 지정합니다.Access-Control-Allow-Methods: 허용된 HTTP 메서드(예: GET, POST, 등)의 목록을 지정합니다.Access-Control-Allow-Headers: 허용된 HTTP 헤더의 목록을 지정합니다.Access-Control-Allow-Credentials: 요청에 인증 정보를 포함할 수 있는지 여부를 나타냅니다(참/거짓).Access-Control-Expose-Headers: 브라우저에 노출되어야 하는 추가적인 응답 헤더의 목록을 지정합니다.위의 항목들은 서버에서 브라우저로 보낸 응답(HTTP response)에 포함됩니다.
웹사이트의 출처, 메서드 등을 허용해주었는지 확인하는데 사용됩니다. 만약 허용하지 않았다면 CORS에러가 발생합니다.
그렇다면 브라우저는 어떻게 cors를 생성하는 것일까?
https://www.example.com에 방문합니다.https://api.example.com/data 로 GET요청을 보냅니다. https://api.example.com/data 로 보내진 것을 감지합니다. Origin 헤더를 확인합니다.https://www.example.com 가 포함되어 있습니다. https://api.example.com 는 브라우저가 보낸 Origin 헤더를 확인하고 허용된 출처인지 확인합니다. https://www.example.com 를 허용하고 있다면 서버는 Access-Control-Allow-Origin헤더에 https://www.example.com 를 포함하여 응답합니다. https://api.example.com 에서의 AJAX 요청을 허용합니다.동일출처라도 브라우저는 여전히 HTTP Origin해더를 검사합니다. CORS는 브라우저에서 실행되는 보안정책이기 때문에 모든 AJAX 요청에 대해 Origin을 검사합니다.
프로토콜, 호스트, 포트가 모두 같은 경우를 의미합니다.
현재 웹페이지가 http://www.example.com:80 에서 로드 되었다면, 이 웹페이지는 해당 URL을 이용한 API 요청에 자유롭게 접근할 수 있습니다
즉 http://www.example.com:80/poster 로 get 요청을 보내는게 자유롭게 됩니다
다른출처는 앞에서 말했던 프로토콜, 호스트, 포트중 최소 하나의 요소가 다른경우를 말합니다.
현재 웹페이지가 http://www.example.com:80 에서 로드 되었다면 다른출처는 https://www.example.com, http://www.example.com 가 됩니다.
아주 다양한 문제가 발생합니다. 악의적인 공격자가 해당 웹을 이용해서 데이터를 탈취하거나 웹 애플리케이션 자체를 공격해 데이터를 손상시킬 수도 있습니다.
간단하게 어떤 문제가 발생하는지 알아봅시다.
다른 출처에서 악의적인 요청을 보내 사용자의 권한을 이용하여 인증정보나 데이터를 변조하는 공격입니다. 이로인해 사용자 계정이 해킹당할 수 있습니다.
악의 적인 출처로 부터 AJAX요청을 제한하지 않으면 해당 출처에서는 브라우저의 쿠키를 탈취하거나 세션을 유출할 수 있습니다. 이로인해 사용자의 로그인상태가 노출되거나 민감한 정보에 접근될 수 있습니다. (ex. 네이버 로그인페이지를 닮은 피싱사이트)
다른 출처의 리소스에 자유롭게 접근하게 되면 사용자의 민감한 정보가 악의적인 출처로 전송될 수 있습니다.
Dos 공격을 실행할 수 있습니다. 이로인해 서버의 자원이 고갈되거나 서버가 다운될 수 있습니다.
악의 적인 출처에서는 해당 리소스를 수정하거나 손상시킬 수 있습니다. 이로 인해 데이터 유실이나 무결성 문제가 발생할 수 있습니다.
cors에러에 대해 이번기회에 좀 더 자세히 알 수 있었다. cors를 지키지 않으면 어떻게 되는지 알았으니 그 중요성이 확실히 와닿았다.
많은 도움이 되었습니다, 감사합니다.