문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 다음 판 양쪽 다음 판 | ||
springframework:security [2013/01/21 15:28] kwon37xi |
springframework:security [2015/09/22 13:09] 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 ===== | ||
줄 72: | 줄 90: | ||
SpringSecurity는 로그인 혹은 권한 관련예외가 발생할 경우 세션에 해당 예외를 저장한다. ([[http:// | SpringSecurity는 로그인 혹은 권한 관련예외가 발생할 경우 세션에 해당 예외를 저장한다. ([[http:// | ||
- | 문제는 기계화된 로그인 공격이 들어올 경우 예외들이 모두 세션에 저장되어 메모리 고갈을 일으킨다는 점이다. 이 때문에 [[http:// | + | 해당 예외는 [[http:// |
+ | |||
+ | 문제는 기계화된 로그인 공격이 들어올 경우 | ||
+ | |||
+ | 혹은 설정에서 '' | ||
+ | <code xml> | ||
+ | <http ... create-session=" | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== 아예 세션에 로그인 실패 예외를 저장하지 않도록 ==== | ||
+ | saveException()을 호출하지 않도록 처리한 구현체를 다음과 같이 설정해 준다. | ||
+ | <code xml>< | ||
+ | |||
+ | 이는 로그인 실패에 대한 것이며 권한 없음에 대한 예외는 다른 문제이다. | ||
+ | |||
+ | ==== JSP에서 삭제 ==== | ||
+ | JSP에서 저장된 예외를 메시지 출력에 사용하는 경우가 있을 수 있는데, 이때는 JSP에서도 삭제하도록 해야 한다. | ||
+ | <code jsp> | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Session 직접 구현 ===== | ||
+ | * ConcurrentSessionFilter -> SecurityContextRepository | ||
+ | |||
+ | ===== 참고 ===== | ||
+ | * [[http:// | ||
- | < |