이 글은 인프런 정수원님의 강의를 복습하며 작성한 글입니다. 세션 고정 보호 세션 고정은 사용자를 공격하는 한 방법 중 하나다. 공격자가 서버에게서 먼저 세션 ID를 받은 후, 세션 ID를 사용자에게 심어두어 사용자가 그 세션 ID로 인증하도록 유도하는 방법이다. 그림과 함께 아래에서 좀 더 자세히 살펴볼 수 있다. 공격자가 서버에 접속한다. 서버는 공격자를 위한 세션을 만들고, SESSION ID = 123456을 응답해준다. 공격자는 응답받은 123456을 사용자에게 심어둔다. (사용자에게 세션 고정) 사용자는 SESSION ID = 123456을 헤더에 싣고, 서버에게 인증 요청을 한다. 서버는 인증을 하고, 인증 객체를 SESSION ID = 123456인 세션에게 담아주고, 응답을 내려준다. 공..
이 글은 인프런 정수원님의 강의를 복습하며 작성한 글입니다. 동시세션 제어 동시세션이란 동일한 계정으로 접속했을 때 만들어지는 세션을 의미한다. 즉, A,B라는 사용자가 각각 C라는 계정으로 접속했을 때 A,B 사용자들을 위한 세션이 각각 만들어진다. 이런 세션들을 동시세션이라고 한다. 동시세션을 제어하는 것은 중요한 일이다. 동시세션이 생긴다는 것은 동시에 여러 사람이 동일한 계정으로 접속할 수 있는 것을 의미한다. 따라서 동일 계정에서 동시에 사용할 수 있는 사람을 하나만으로 설정하고 싶다면, 동시세션을 제어해야한다. 동시세션 제어 전략 이전 사용자 세션 만료 전략 현재 사용자 인증 실패 전략 동시 세션 전략은 위와 같이 두 가지의 전략이 있다. 아래에서 좀 더 자세히 살펴보도록 한다. 이전 사용자 ..
이 글은 인프런 정수원님의 강의를 듣고 복습하며 작성한 글입니다. 익명 사용자 필터(AnonymousAuthFilter) 익명 사용자 필터는 인증받지 않은 사용자를 위해 제공되는 필터다. 예를 들어 인증을 받지 않는 사용자가 있다고 가정해보자. 그러면 이 사람은 인증 객체를 가지고 있지 않기 때문에 인증 객체가 있냐고 물어보면 항상 Null이라는 값을 보여줄 것이다. 그런데 이렇게 될 경우 Null Pointer Exception이 발생할 수 있다. 따라서 스프링 시큐리티는 인증되지 않은 사용자에게도 익명 인증 객체를 전달하면서 "인증 객체로 증명한다"라는 방식을 유지하려고 한다. 사실, 익명 인증객체라고 해서 뭔가 기능이 추가되지는 않는다. 익명 인증 객체는 어디에도 갈 수 없는 통행증을 얻은 것이나 ..
이 게시글은 인프런 정수원님의 강의를 복습하며 작성한 글입니다. Remember Me 기능 로그인을 한 사용자가 있더라도 세션이 만료되면 다시 한번 로그인을 해야한다. 그리고 혹시, 오늘 저녁에 자고 일어나서 다음 날 접속했을 때, 바로 접속하면 베스트가 아닐까? 이런 기능을 구현해주는 것을 Remember Me라고 한다. Remember me 기능이 활성화 되면, Remember me 쿠키를 내려준다. 사용자가 요청할 때, Remember me 쿠키를 서버에게 전달해주면 다시 한번 로그인을 하지 않더라도 자동으로 로그인을 할 수가 있게 된다. 왜냐하면 Remember me 쿠키를 만들 던 시점은 로그인을 하던 시점이기 떄문이다. 로그인을 하기 때문에 인증 객체가 만들어진다. 그리고 이런 정보가 Reme..
이 포스팅은 인프런 정수원님의 강의를 복습하며 정리한 글입니다. Logout 일전에 Login은 사용자 인증이 완료되면, 인증 객체를 만들고 Security Context에 저장했고, 또한 인증 객체 관련해서 세션을 생성해서 JSESSION ID를 내려주면서 구현했다. Logout 기능을 구현해주기 위해서는 Login에서 했던 것들을 하나하나 무효화해주면 된다. Security Context에 있는 인증 객체 삭제 세션 무효화 쿠키 정보 삭제 스프링 시큐리티의 Logout API를 사용하면, 위의 과정들을 하나하나 처리할 수 있는 것은 물론이고, 로그아웃 후 리다이렉트 하는 위치까지 지정할 수 있게 된다. 실제로는 위와 같은 일을 하는 것으로 이해를 할 수 있겠다. Spring Security Logou..