로그인 처리하기 - 쿠키 사용
로그인의 상태를 유지하기 위해 쿠키를 사용할 수 있다.
서버에서 로그인에 성공하면 HTTP 응답에 쿠키를 담아서 브라우저에 전달하면 브라우저는 앞으로 해당 쿠키를 지속해서 보내준다.
쿠키를 생성한 뒤에 클라이언트에서 쿠키 저장소에서 조회하여 자동으로 쿠키를 서버에 넘긴다.
쿠키와 보안 문제
보안문제
- 쿠키 값은 임의로 변경할 수 있다.
- 쿠키에 보관된 정보는 훔쳐갈 수 있다.
- 해커가 쿠키를 한번 훔쳐가면 평생 사용할 수 있다.
대안
- 쿠키에 중요한 값을 노출하지 않고, 사용자 별로 예측 불가능한 임의의 토큰(랜덤 값)을 노출하고, 서버에서 토큰과 사용자 id를 매핑해서 인식한다. 그리고 서버에서 토큰을 관리한다.
- 토큰은 해커가 임의의 값을 넣어도 찾을 수 없도록 예상 불가능 해야 한다.
- 해커가 토큰을 털어가도 시간이 지나면 사용할 수 없도록 서버에서 해당 토큰의 만료시간을 짧게(예: 30분) 유지한다. 또는 해킹이 의심되는 경우 서버에서 해당 토큰을 강제로 제거한다.
로그인 처리하기 - 세션 동작 방식
사용자가 loginId , password 정보를 전달하면 서버에서 해당 사용자가 맞는지 확인한다
UUID처럼 추정 불가능한 세션 ID와 보관할 값을 세션 저장소에 저장한다.
서버는 클라이언트에 mySessionId라는 이름으로 세션 ID 만 쿠키에 담아서 전달한다.
클라이언트는 쿠키 저장소에 mySessionId 쿠키를 보관한다
클라이언트는 요청 시 항상 mySessionId 쿠키를 전달한다
서버에서는 클라이언트가 전달한 mySessionId 쿠키 정보로 세션 저장소를 조회해서 로그인 시 보관한 세션 정보를 사용한다.
세션을 사용한 보안문제 해결
쿠키 값을 변조 가능 -> 예상 불가능한 복잡한 세션 Id를 사용한다.
쿠키에 보관하는 정보는 클라이언트 해킹 시 공개될 가능성이 있다 -> 세션 Id가 공개되어도 여기에는 중요한 정보가 없다.
쿠키 탈취 후 사용 -> 해커가 토큰을 털어가도 시간이 지나면 사용할 수 없도록 서버에서 세션의 만료시간을 짧게(예: 30분) 유지한다. 또는 해킹이 의심되는 경우 서버에서 해당 세션을 강제로 제거하면 된다.
출처 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2/dashboard
'Spring' 카테고리의 다른 글
[Spring] @ExceptionHandler, @ControllerAdvice를 통한 예외 처리 (0) | 2023.03.24 |
---|---|
[Spring] 검증(Bean Validation) (0) | 2023.01.20 |
[Spring] 메시지와 국제화 (0) | 2023.01.16 |
[Spring] @ModelAttribute 사용법 (0) | 2023.01.13 |
[Spring] @RequestParam 사용법 (0) | 2023.01.10 |