CORS는 웹 애플리케이션이 다른 출처의 자원에 접근할 수 있도록 허용하는 보안 메커니즘입니다. 웹 보안 정책인 동일 출처 정책(Same-Origin Policy)은 브라우저가 다른 출처의 요청을 기본적으로 차단하지만, CORS는 서버가 특정 헤더를 사용하여 이 요청을 허용할 수 있게 합니다. 예를 들어, example.com에서 api.example2.com의 자원에 접근하려면, api.example2.com 서버는 응답 헤더에 Access-Control-Allow-Origin: example.com을 포함해야 합니다.
CORS는 어떤 보안 위협을 대비하는 기술인가?\
CORS는 주로 다음과 같은 보안 위협을 대비합니다:
- 크로스 사이트 요청 위조 (CSRF): 악성 웹사이트가 사용자를 대신해 원치 않는 요청을 다른 사이트에 보낼 수 있는 공격입니다.
- 데이터 도용: 해커가 다른 도메인에서 데이터를 훔치는 것을 방지합니다.
- 정보 노출: 민감한 정보를 다른 출처에서 접근하지 못하게 하여 정보 유출을 방지합니다.
예시
만약 사용자가 bank.com에 로그인한 상태에서 악성 사이트 malicious.com을 방문한다면, 이 악성 사이트가 bank.com으로 요청을 보내 사용자의 정보를 탈취할 수 있습니다. 하지만 CORS는 bank.com 서버가 올바른 출처에서만 요청을 허용하도록 설정하여 이러한 공격을 막습니다.
동일 출처 정책 (Same-Origin Policy)이란 무엇인가?
동일 출처 정책은 웹 브라우저 보안 정책으로, 문서나 스크립트가 자신이 로드된 출처와 동일한 출처에서만 리소스를 요청할 수 있도록 제한합니다. 출처는 스키마(프로토콜), 호스트(도메인), 포트로 정의됩니다.
예시:
- https://example.com/page1은 https://example.com/page2에 접근 가능.
- https://example.com은 http://example.com에 접근 불가 (프로토콜 다름).
- https://example.com은 https://api.example.com에 접근 불가 (호스트 다름).
이 정책은 크로스 사이트 스크립팅(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");
}
};
}
}
설명
- Controller에서 설정: @CrossOrigin 어노테이션을 사용해 특정 컨트롤러나 메소드에 CORS를 설정할 수 있습니다.
- 글로벌 설정: WebMvcConfigurer를 구현해 애플리케이션 전역에서 CORS 설정을 적용할 수 있습니다.
이렇게 하면 https://example.com 도메인에서만 CORS 요청을 허용하게 됩니다.
'보안' 카테고리의 다른 글
[KMS] Key Management Service(KMS) 란 무엇인가? (0) | 2024.07.03 |
---|---|
[Security] OWASP란 무엇인가? (0) | 2024.06.28 |
[위협 모델링] STRIDE란 무엇인가? (0) | 2024.05.29 |
TLS 1.3에 대해 알아보자 (0) | 2023.03.28 |
[보안 인증] ITSEC란 무엇인가? (0) | 2019.06.11 |