본문 바로가기

Spring Security

[Spring Security] Cors

Cors

SOP(동일 출처 정핵)으로 인해 다른 출처의 리소스접근이 막힌 것을 풀어주는 "다른 출처간에 리소스를 공유할 수 있도록 해주는 정책"입니다.

 

 

왜 이런게 있을까

 

제가 착한닷컴이라는 사이트를 사용한다 가정합니다. 저는 착한닷컴에 정책에따라 쿠키나 토큰등을 사용합니다.
그런데 어느날 정체모를 링크를 눌러 나쁜닷컴의 리소스를 저의 크롬에 받아드립니다.
그렇게되면 나쁜닷컴의 코드들이 저의 쿠키나 토큰등을 악용할 목적으로 가져가게됩니다.
그럼 나쁜닷컴의 운영자들은 저의 쿠키나 토큰을 통해 나쁜짓을 마음껏 할 수 있는 상황이 발생합니다.
그렇기에 동일 충처(Origin)에서 온 요청만을 처리하도록 규제하는것이 sop입니다.

 

 

사용방법

 

setAllowCredentials : 내 서버가 응답을 할 때, json을 자바스크립트에서 처리할 수 있게 할지를 설정
addAllowedOriginPattern : 특정 ip에 응답을 허용하겠다.
addAllowedHeader : 특정 header에 응답을 허용하겠다.
addAllowedMethod : 특정 methode(get, post, put...)에 응답을 허용하겠다.
위의 설정들을 하여 Configuration을 만든뒤 SecurityFilter에 등록시킵니다.

 

 

아래는 필자가 JWT를 이용한 서버를 구성할 때, 걸어놓았던 필터입니다.

 

@Configuration
public class CorsConfig {

    @Bean
    public CorsFilter corsFilter(){
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true); // 내 서버가 응답을 할 때, json을 자바스크립트에서 처리할 수 있게 할지를 설정
//        config.addAllowedOrigin("*"); // 모든 ip에 응답을 허용하겠다.
        config.addAllowedHeader("*"); // 모든 header에 응답을 허용하겠다.
        config.addAllowedMethod("*"); // 모든 methode(get, post, put...)에 응답을 허용하겠다.
        config.addAllowedOriginPattern("*");
        config.addExposedHeader("Authorization");
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}

 

 

simple request vs preflight

simple request : get, post와 같은 단순요청은 요청을 보내고, 설정에따라 응답을 못받을 수 있는 단순한 구조입니다.
preflight : put patch와 같은 DB에 영향을 줄 수 있는 요청은 미리 요청을 보내도되는지 확인 후에 사용할 수 있는 구조입니다.

 

 

'Spring Security' 카테고리의 다른 글

[Spring Security] OAuth  (0) 2023.02.13
[Spring Security] 보안 알고리즘  (2) 2023.01.23
[Spring Security] Security Session  (0) 2023.01.15