문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
springframework:security [2013/01/21 15:33] kwon37xi [아예 세션에 로그인 실패 예외를 저장하지 않도록] |
springframework:security [2021/11/02 08:57] (현재) kwon37xi |
||
---|---|---|---|
줄 1: | 줄 1: | ||
====== Spring Security ====== | ====== Spring Security ====== | ||
+ | * 현재 페이지는 Spring Security 3.x 기준 | ||
+ | * [[springframework: | ||
===== http ===== | ===== http ===== | ||
* < | * < | ||
+ | |||
+ | ===== Session 폭증 문제 ===== | ||
+ | Spring Security는 로그인시 예외를 비롯해 많은 정보를 세션(HttpSession)에 저장한다. | ||
+ | |||
+ | 이 경우 로그인이 공격 대상이 될 때 로그인 URL에서 세션을 폭발적으로 생성하게 되고 이로인해 메모리 폭증이 발생한다. 이는 결과적으로 다시 매우 잦은 Full GC를 유발하게 된다. | ||
+ | |||
+ | 따라서 공격에 노출될 가능성이 있는 사이트는 최소한 로그인의 경우에 세션을 생성하지 않도록 다양한 처리가 필요하다. 혹은 세션을 생성하더라도 공격시도는 Spring Security를 타기전에 다른 방법으로 차단할 수 있어야 한다. | ||
+ | |||
+ | 로그인시에 세션에 저장하는 값들은 [[http:// | ||
+ | |||
+ | ==== 설정에서 세션 생성하지 않도록 ==== | ||
+ | 설정에서 '' | ||
+ | <code xml> | ||
+ | <http ... create-session=" | ||
+ | </ | ||
+ | 이렇게 하면 [[http:// | ||
===== Expression Handler ===== | ===== Expression Handler ===== | ||
줄 75: | 줄 93: | ||
문제는 기계화된 로그인 공격이 들어올 경우 모든 리퀘스트는 새로운 세션으로 간주되며 로그인 실패 예외들이 모두 세션에 저장되어 메모리 고갈을 일으킨다는 점이다. 이 때문에 [[http:// | 문제는 기계화된 로그인 공격이 들어올 경우 모든 리퀘스트는 새로운 세션으로 간주되며 로그인 실패 예외들이 모두 세션에 저장되어 메모리 고갈을 일으킨다는 점이다. 이 때문에 [[http:// | ||
+ | |||
+ | 혹은 설정에서 '' | ||
+ | <code xml> | ||
+ | <http ... create-session=" | ||
+ | </ | ||
줄 88: | 줄 111: | ||
< | < | ||
</ | </ | ||
+ | |||
+ | |||
+ | ===== Session 직접 구현 ===== | ||
+ | * ConcurrentSessionFilter -> SecurityContextRepository | ||
+ | |||
+ | ===== @AuthenticationPrincipal ===== | ||
+ | * [[https:// | ||
+ | * Controller 에 로그인 사용자 객체를 주입할 수 있다. | ||
+ | |||
+ | ===== 참고 ===== | ||
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// |