CORS에 대해 알아보자
SOP, Same Origin Policy
브라우저에서는 보안적인 이유로 cross-origin HTTP 요청들을 제한한다. 그래서 cross-origin 요청을 하려면 서버의 동의가 필요하다. 만약 서버가 동의한다면 브라우저에서는 요청을 허락하고, 동의하지 않는다면 브라우저에서 거절한다.
이러한 허락을 구하고 거절하는 메커니즘을 HTTP-header를 이용해서 가능한데, 이를 CORS(Cross-Origin Resource Sharing)라고 부른다.
브라우저는 SOP(Same Origin Policy)를 적용하여 다른 출처(Origin)의 리소스에 대한 접근을 제한한다. 이는 보안 상의 이유로 중요하다. 하지만 때로는 다른 출처의 리소스에 접근해야 하는 경우가 있다. 이 때 CORS를 사용하여 다른 출처에서 리소스에 대한 접근을 허용하도록 할 수 있다.
CORS는 서버가 리소스에 대한 접근을 허용하는지 여부를 나타내는 HTTP 헤더를 클라이언트에게 반환함으로써 작동한다. 이 헤더는 다른 출처에서 리소스에 대한 요청을 수락하는 것을 허용하거나 거부하는 데 사용된다.
CORS는 브라우저에서만 적용되며, 서버 간 통신에는 영향을 미치지 않는다. 따라서 서버 측에서는 다른 출처에서의 요청을 수락하는지 여부를 결정할 때 CORS를 고려해야 한다.
서버간 통신에는 CORS가 없다?
CORS는 브라우저에서만 적용되는 보안 메커니즘이며, 서버 간 통신에는 직접적인 영향을 미치지 않는다. 서버 간 통신을 할 때는 보안상의 이유로 HTTPS를 사용하거나 토큰 기반의 인증을 구현하는 등의 다른 보안 메커니즘을 사용해야 한다.
서버 간 통신을 할 때, CORS와 유사한 메커니즘으로는 CSRF(Cross-Site Request Forgery) 방어 메커니즘이 있다. CSRF는 악의적인 사용자가 인증된 사용자의 권한으로 서버에 요청을 보내는 공격을 방어하는 메커니즘으로, 서버에서는 CSRF 토큰을 생성하여 요청과 함께 전송하고, 이 토큰이 일치하는 경우에만 요청을 처리하도록 한다. 이렇게 함으로써 악의적인 요청을 걸러내고, 서버 간 통신의 보안성을 높일 수 있다.