본문 바로가기

보안

[CORS] CORS (Cross-Origin Resource Sharing)란 무엇인가?

728x90
반응형

CORS는 웹 애플리케이션이 다른 출처의 자원에 접근할 수 있도록 허용하는 보안 메커니즘입니다. 웹 보안 정책인 동일 출처 정책(Same-Origin Policy)은 브라우저가 다른 출처의 요청을 기본적으로 차단하지만, CORS는 서버가 특정 헤더를 사용하여 이 요청을 허용할 수 있게 합니다. 예를 들어, example.com에서 api.example2.com의 자원에 접근하려면, api.example2.com 서버는 응답 헤더에 Access-Control-Allow-Origin: example.com을 포함해야 합니다.

CORS는 어떤 보안 위협을 대비하는 기술인가?\

출처 : https://escapefromcoding.tistory.com/724

CORS는 주로 다음과 같은 보안 위협을 대비합니다:

  1. 크로스 사이트 요청 위조 (CSRF): 악성 웹사이트가 사용자를 대신해 원치 않는 요청을 다른 사이트에 보낼 수 있는 공격입니다.
  2. 데이터 도용: 해커가 다른 도메인에서 데이터를 훔치는 것을 방지합니다.
  3. 정보 노출: 민감한 정보를 다른 출처에서 접근하지 못하게 하여 정보 유출을 방지합니다.

예시

만약 사용자가 bank.com에 로그인한 상태에서 악성 사이트 malicious.com을 방문한다면, 이 악성 사이트가 bank.com으로 요청을 보내 사용자의 정보를 탈취할 수 있습니다. 하지만 CORS는 bank.com 서버가 올바른 출처에서만 요청을 허용하도록 설정하여 이러한 공격을 막습니다.

 

동일 출처 정책 (Same-Origin Policy)이란 무엇인가?

출처 : https://escapefromcoding.tistory.com/724

동일 출처 정책은 웹 브라우저 보안 정책으로, 문서나 스크립트가 자신이 로드된 출처와 동일한 출처에서만 리소스를 요청할 수 있도록 제한합니다. 출처는 스키마(프로토콜), 호스트(도메인), 포트로 정의됩니다.

예시:

이 정책은 크로스 사이트 스크립팅(XSS) 및 데이터 탈취를 방지하기 위한 중요한 보안 메커니즘입니다.

CORS 적용 예시(Spring Framework)

Java Spring Framework에서 CORS를 설정하는 방법을 살펴보겠습니다.

방법 1: Controller에서 CORS 설정

import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {

    @CrossOrigin(origins = "https://example.com")
    @GetMapping("/data")
    public String getData() {
        return "CORS enabled for https://example.com";
    }
}

방법 2: 글로벌 CORS 설정

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MyWebConfig {

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")
                        .allowedOrigins("https://example.com")
                        .allowedMethods("GET", "POST", "PUT", "DELETE");
            }
        };
    }
}

설명

  1. Controller에서 설정: @CrossOrigin 어노테이션을 사용해 특정 컨트롤러나 메소드에 CORS를 설정할 수 있습니다.
  2. 글로벌 설정: WebMvcConfigurer를 구현해 애플리케이션 전역에서 CORS 설정을 적용할 수 있습니다.

이렇게 하면 https://example.com 도메인에서만 CORS 요청을 허용하게 됩니다.

728x90
반응형