본문 바로가기
Develop

CORS(Cross-Origin Resource Sharing)

by jaeyoungb 2022. 12. 12.

SOP(Same Origin Policy)는 애플리케이션 간의 출처(Origin)이 다른 경우, 스크립트 기반의 HTTP 통신을 통한 리소스 접근이 제한되는 정책이다.

 

CORS는 이러한 접근 제한의 예외 조항으로, 다른 출처의 리소스 공유를 막는 SOP 정책에 대해 접근 권한을 얻을 수 있게 하는 방안이다.

 

다른 출처의 리소스를 가져오는 과정에서 발생하는 에러는 SOP 정책 때문이고,

이를 해결해줄 수 있는 것이 CORS이다.

 

CORS 정책 동작 방식

  • 프리플라이트 요청(Preflight Request) : 실제 요청을 보내기 전, OPTIONS 메서드로 사전 요청을 보내 해당 출처 리소스에 접근 권한이 있는지부터 확인하는 것을 의미
  • 단순 요청(Simple Request) : 특정 조건이 만족되면 프리플라이트 요청을 생략하고 요청을 보내는 것을 의미
  • 인증 정보를 포함한 요청(Credentialed Request) : 요청 헤더에 인증 정보를 담아 보내는 요청을 의미 (프론트, 서버 양측 모두에 CORS 설정이 필요)

 

CORS 정책 설정 방법

1. Global 설정 클래스를 이용해 특정 도메인에 모두 적용하는 방법

@Configuration
public class SecurityConfiguration {
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            ...
            .cors().and()	// CORS 정책 설정
            ...
        return http.build();
    }
}

 

2. @CrossOrigin 애너테이션을 이용해 컨트롤러 단에서 적용하는 방법

@CrossOrigin	// 1. 컨트롤러 단에 CORS 정책 설정하는 방법
@RestController
public class HelloController {
    
    @CrossOrigin	// 2 . 메서드 단에 CORS 정책 설정하는 방법
    @GetMapping
    public ResponseEntity getHello() {
        ...
    }
}

 

- https://www.baeldung.com/spring-cors

- https://docs.spring.io/spring-security/site/docs/4.2.x/reference/html/cors.html

- https://developer.mozilla.org/ko/docs/Web/HTTP/CORS

 

 

CSRF(Cross-Site Request Forgery)

사이트 간의 요청을 위조하는 공격으로, 신뢰할수 있는 사용자를 가장하여 웹 사이트에 원치 않는 명령을 보내는 방식이다.

 

Spring Security는 아무런 설정을 하지 않아도 CSRF Token을 수신하고 검증하는 과정을 거치기 때문에,

기본적으로 CSRF 공격을 막아준다.

 

- https://owasp.org/www-community/attacks/csrf

- https://docs.spring.io/spring-security/site/docs/5.0.x/reference/html/csrf.html

'Develop' 카테고리의 다른 글

네트워크 기초  (0) 2023.07.12
로컬에서 생성한 MySQL 데이터베이스를 마이그레이션하기  (2) 2023.06.06
서버와 클라이언트  (0) 2022.12.12
SSR과 CSR  (0) 2022.10.28
스프링 DB 접근 기술  (0) 2022.10.17