-
세션 정책 및 고정세션 공격방지SPRING/스프링 시큐리티 2021. 8. 3. 10:51
스프링 시큐리티에서는 세션 관련 정책을 설정할 수 있다.
하나의 계정에 최대 몇개의 세션을 유지할 것인지, 새로운 사용자가 접근하면 로그인을 금지할 것인지 아니면 기존 사용자를 로그아웃 시킬 것인 지 등 정책 설정이 필요하다.
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired UserDetailsService userDetailsService; @Override protected void configure(HttpSecurity http) throws Exception { // 모든 리소스에 대한 인증완료시 접근 허용 http .authorizeRequests() .anyRequest().authenticated(); // form Login 사용 http .formLogin(); // 세션 정책 (최대 세션 개수 1개로 설정 및 해당 횟수 넘으면 로그인 X) http .sessionManagement() .maximumSessions(1) // 최대 세션 개수 1 .maxSessionsPreventsLogin(true); // 최대 세션 개수를 초과할 시에 로그인 방지 } }
위 설정에서 동일 계정으로 2번 로그인 시 아래와 같은 화면이 나온다.
.maxSessionsPreventsLogin(false); 로 설정시에는 기존 사용자가 세션아웃이 된다.
고정세션공격 보호하기
공격자가 JESSIONID를 가로채서 Session을 공유하여 공격
-> 사용자에게 접속할때마다 JESSIONID를 발급해서 막음.
아무 설정을 하지 않으면 default 값인 changeSessionId로 설정
1. changeSessionId()
- 새로운 세션ID가 발급됨.
- 이전 세션 사용이 가능함.
http .sessionManagement() .sessionFixation() .changeSessionId() .maximumSessions(1);
2. newSession()
- 새로운 세션ID가 발급됨.
- 이전 세션 사용이 불가능함.
http .sessionManagement() .sessionFixation() .newSession();
3. none()
- 아무설정을 하지 않음. (고정세션 공격이 됨)
http .sessionManagement() .sessionFixation().none();
'SPRING > 스프링 시큐리티' 카테고리의 다른 글
remember-me (0) 2021.08.01 로그아웃 (0) 2021.08.01 FORM 인증 - 기본 (0) 2021.08.01 Security Configuration 클래스 기본 설정 (0) 2021.08.01 의존성 추가 및 기본 세팅 (0) 2021.08.01