본문 바로가기
Spring

[Spring] 로그인 처리(쿠키, 세션)

by 당코 2023. 1. 24.

로그인 처리하기 - 쿠키 사용

로그인의 상태를 유지하기 위해 쿠키를 사용할 수 있다.

서버에서 로그인에 성공하면 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