학원 관리 API 서버 로그인: 왜 쿠키 대신 세션을 선택하고 30분 타임아웃을 걸었는가?
Category: Backend Security / Architecture | Project: 학원 강사 관리 시스템
1. [문제 발생] 브라우저 쿠키의 치명적 보안 결함
F12를 누르면 쿠키를 클라이언트가 변경할수있다.
내가 만들 학원 강사 API 서버에서 A강사가 B강사의 주간 수업현황이 궁금하거나 악의적으로 사용하기위해
브라우저 쿠키의 보안 결함을 사용하여 해킹을 시도 할수있다.
2. [원인 분석 및 트레이드오프] 쿠키 vs 세션의 딜레마
- 내가 이해하지 못했던 쿠키와 세션의 개념을 쉽게 풀어적은것
쿠키는 클라이언트가 가지고 있는 주머니 이고 세션은 서버가 가지고 있는 금고이다 세션에서는 중요한 정보만을 가지고 있고 서버가 클라이언트에게 임의의 랜덤값(키)를 주면 클라이언트는 키를 쿠키안에 저장을 하고 클라이언트가 요청 할때 마다 랜덤키를 서버에게 보내 서버는 랜덤키를 확인한후 인증을 통과시켜준다.
쿠키의 장점은 서버가 관리하는것이 아닌 클라이언트가 관리하는것이기 때문에 속도가 빠르지만 위변조가 가능하다는것이 단점이고
세션의 장점은 중요한 정보를 서버가 관리 하고 그 중요한 정보에 접근하기 위한 인증키인 랜덤키를 클라이언트에게 전달하여 보안에 신경쓸 수 있다. 하지만 메모리를 차지하는 비율이 높아 너무 큰 데이터를 넣으면 안된다.
3. [해결 및 적용] 학원 관리 API 서버의 세션 타임아웃 설계
그래서 내 프로젝트인 학원 관리 API 서버에서는 세션을 사용할것이고
강사들이 매일 수업 하자마자 학생들의 수업현황을 적기 때문에 세션 타임아웃을 30분으로 설계할것이다.
세션 생성코드
// 세션이 있으면 세션 반환 , 없으면 신규 세션 생성
HttpSession session = request.getSession()
// 세션에 로그인 회원 정보 보관
session.setAttribute(Key,Value)
타임 아웃 설계
server.servlet.session.timeout=180