스프링 시큐리티 권한 부여 구성 - 제한적용

조승빈·2024년 5월 28일

Spring Security

목록 보기
6/11

MSC 선택기로 권한을 부여할 요청 선택

  • mvcMatchers(HttpMethod method, String… patterns)
    - 제한을 적용할 경로, HTTP방식을 모두 지정 가능

  • mvcMatchers(String… patterns)
    - 경로를 기준으로 권한 부여 제한

import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                // GET 요청에 대해서 /admin/** 경로는 ROLE_ADMIN 권한이 필요함
                .mvcMatchers(HttpMethod.GET, "/admin/**").hasRole("ADMIN")
                // POST 요청에 대해서 /admin/** 경로는 ROLE_ADMIN 권한이 필요함
                .mvcMatchers(HttpMethod.POST, "/admin/**").hasRole("ADMIN")
                // GET 요청에 대해서 /user/** 경로는 ROLE_USER 권한이 필요함
                .mvcMatchers("/user/**").hasRole("USER")
                // "/public/**" 경로는 인증 없이 접근 가능
                .mvcMatchers(HttpMethod.POST, "/user/**").hasRole("USER")
                // 기타 모든 요청은 인증만 필요함
                .anyRequest().authenticated()
            .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
            .and()
            .logout()
                .permitAll();
    }
}

CSRF(Cross-Site Request Forgery)

CSRF(크로스 사이트 요청 위조)는 웹 애플리케이션의 보안 취약점 중 하나로, 사용자가 의도하지 않은 요청을 수행하게 하여 악의적인 행동을 실행하게 만드는 공격이다. CSRF 공격은 사용자가 현재 로그인되어 있는 웹 애플리케이션에서 발생하며, 공격자가 사용자의 권한을 도용하여 악의적인 요청을 수행하도록 한다.

CSRF의 원리

  • 공격 준비: 공격자는 악성 링크 또는 스크립트를 사용자에게 전달
  • 사용자 클릭: 사용자가 로그인된 상태에서 공격자가 제공한 악성 링크를 클릭하거나 스크립트가 실행
  • 악의적인 요청 전송: 사용자의 브라우저는 로그인 세션을 유지한 채로 공격자가 의도한 요청을 자동으로 웹 애플리케이션에 전송
  • 요청 처리: 웹 애플리케이션은 해당 요청을 사용자가 의도한 요청으로 인식하고 처리

CSRF 방어

스프링 시큐리티는 CSRF 공격에 대한 방어 기능을 기본적으로 제공한다. CSRF 보호 기능을 활성화하면 모든 상태 변경 요청(POST, PUT, DELETE 등)에 대해 CSRF 토큰을 요구한다. 이 토큰은 서버가 생성하여 클라이언트에 전달하고, 클라이언트는 이후의 요청에 이 토큰을 포함시켜야 한다.

  • 기본 와일드카드 (*)
    *는 경로의 한 부분(segment)을 대체한다.
    예시: /user/*는 /user/abc, /user/123 등을 매칭한다. 하지만 /user/abc/123는 매칭하지 않는다.
  • 더블 와일드카드 (**)
    **는 경로의 여러 부분(segments)을 대체할 수 있다.
    예시: /user/**는 /user/abc, /user/abc/123, /user/abc/123/def 등을 모두 매칭한다.

앤트 선택기로 권한을 부여할 요청 선택

  • antMatchers(HttpMethod method, String… patterns)
    - 제한을 적용할 경로, HTTP 방식을 모두 지정 가능
  • antMatchers(String… patterns)
    - 경로를 기준으로 권한 부여 제한
  • antMatchers(HttpMethod method)
    - antMatchers(httpMethod, “/**”) 와 같은 의미이며 경로와 관계없이 HTTP 방식을 지정

mvc 선택기 vs 앤트 선택기
mvc 선택기는 스프링 애플리케이션이 컨트롤러 동작에 대한 일치 요청을 이해하는 방법을 정확하게 지정한다. /hello와 /hello/를 같은 경로로 인식한다.
mvc 선택기를 이용하는 것이 좋다. mvc 선택기를 이용하면 스프링의 경로 및 작업 매핑과 관련한 몇 가지 위험을 예방할 수 있다. 그 이유는 권한 부여 규칙을 위해 경로를 해석하는 방법과 스프링이 경로를 엔드포인트에 매핑하기 위해 해석하는 방법이 같기 때문이다.

profile
평범

0개의 댓글