경주장

[인증 API] 세션 고정보호, 세션 생성 정책 본문

스프링/스프링 시큐리티

[인증 API] 세션 고정보호, 세션 생성 정책

달리는치타 2022. 2. 6. 18:49

세션 고정보호

공격자가 자신의 SessionID를 사용자의 Cookie에 심어 공격자의 세션 쿠키로 사용자가 로그인을 하면 서버에서는 공격자의 SessionID로 인증한 것과 마찬가지로 처리된다. 공격자는 사용자의 리소스를 접근할 수 있게 된다! 이 공격은 세션 고정 공격이라고 불린다.

 

 

이때 매 인증시 Session을 생성하거나 SessionID만 변경하는 것으로 해당 공격을 방어 할 수 있다.

 

http

.sessionManagement()

.sessionFixation() : 세션 고정 정책 설정

 

http.sessionManagement()
        .sessionFixation()
        	.changeSessionId();		// 기본 값 - 인증 시 세션 아이디만 변경 
        	//.migrateSession();	// 서블릿 3.1 이하의 기본 값
        	//.newSession();		// 인증시 새로운 세션 생성
        	//.none();				// 아무런 정책을 적용하지 않음 (세션 고정 공격에 취약)

세션 생성 정책

http

.sessionManagement().sessionCreationPolicy() : 세션 고정 정책 설정

 

        http.sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.ALWAYS);       //항상 생성
//                .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED);//필요시 생성(Default)
//                .sessionCreationPolicy(SessionCreationPolicy.NEVER);      //생성하지 않음, 이미 존재하면 사용
//                .sessionCreationPolicy(SessionCreationPolicy.STATELESS);  //생성하지 않음, 이미 존재해도 사용하지 않음

 

jwt만을 활용한 인증 정책을 활용하는 경우 StateLess 설정을 적용한다.

참고

https://github.com/SilverNine/spring-boot-jwt-tutorial/blob/master/src/main/java/me/silvernine/tutorial/config/SecurityConfig.java