-
로그인 처리1 - 쿠키와 세션스프링/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2024. 2. 2. 00:44
로그인 처리하기 - 쿠키 사용
로그인 상태 유지하기
로그인의 상태를 어떻게 유지할 수 있을까?
HTTP 강의에서 일부 설명했지만, 쿼리 파라미터를 계속 유지하면서 보내는 것은 매우 어렵고 번거로운 작업이다. 쿠키를 사용해보자.
쿠키
서버에서 로그인에 성공하면 HTTP 응답에 쿠키를 담아서 브라우저에 전달하자. 그러면 브라우저는 앞으로 해당 쿠키를 지속해서 보내준다.쿠키에는 영속 쿠키와 세션 쿠키가 있다.
- 영속 쿠키 : 만료 날짜를 입력하면 해당 날짜까지 유지
- 세션 쿠키 : 만료 날짜를 생략하면 브라우저 종료시 까지만 유지
브라우저 종료시 로그아웃이 되길 기대하므로, 우리에게 필요한 것은 세션 쿠키이다.
로그아웃 기능
로그아웃의 방법은- 세션 쿠키이므로 웹브라우저 종료시 서버에서 해당 쿠키의 종료날짜를 0으로 지정
쿠키와 보안 문제
쿠키를 사용해서 로그인Id를 전달해서 로그인을 유지할 수 있었다.
그런데 여기에서 심각한 보안 문제가 있다.
보안문제
쿠키 값은 임의로 변경할 수 있다.
클라이언트가 쿠키를 강제로 변경하면 다른 사용자가 된다.
실제 웹브라우저 개발자모드 -> Applicatrion -> Cookie 변경으로 확인
Cookie : memberId = 1 -> Cookie : memberId = 2와 같이
쿠키에 보관된 정보는 훔쳐갈 수 있다.
만약 쿠키에 개인정보나, 신용카드 정보가 있다면?
이 정보가 웹브라우저에도 보관되고, 네트워크 요청마다 계속 클라이언트에서 서버로 전달되서
쿠키의 정보가 나의 로컬PC에서 털릴 수 있고, 네트워크 전송구간에서도 털릴 수 있다.
해커가 쿠리를 한번 훔쳐가면 평생 쓸 수 있다.
해커가 쿠키를 훔쳐가서 그 쿠키에 악의적인 요청을 계속 시도할 수 있다
대안
쿠키에 중요한 값을 노출하지 않고, 사용자 별로 예측 불가능한 임의의 토큰(랜덤 값)을 노출하고, 서버에서 토큰과
사용자 id를 매핑해서 인식하고 서버에서 토큰을 관리한다.토큰은 해커가 임의의 값을 넣어도 찾을 수 없도록 예상 불가능 해야한다.
해커가 토큰을 털어가도 시간이 지나면 사용할 수 없도록 서버에서 해당 토큰의 만료시간을 짧게(예: 30분)유지하고
해킹이 의심되는 경우 서버에서 해당 토큰을 강제로 제거하면 된다.'스프링 > 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술' 카테고리의 다른 글
스프링 트랜잭션 이해 (0) 2024.03.04 검증 Validation (0) 2024.01.29 메시지, 국제화 (0) 2024.01.25 타임리프 - 스프링 통합과 폼 (0) 2024.01.24 타임리프 (0) 2024.01.23