웹 애플리케이션에서 사용자 인증과 상태 유지를 위해 쿠키와 세션을 사용한다. 보안과 관리 측면에서 세션이 더 안전한 이유는 다음과 같다.
1. 쿠키 값 변조 문제
- 문제점: 사용자가 쿠키 값을 임의로 변경할 수 있다.
- 예시:
Cookie: memberId=1
을 Cookie: memberId=2
로 변경하면 다른 사용자의 정보에 접근할 수 있다.
- 해결책: 세션을 사용하면 클라이언트에 중요한 정보를 직접 저장하지 않고, 추정 불가능한 세션 ID만 쿠키에 저장하여 전달한다.
2. 쿠키 정보 탈취 문제
- 문제점: 쿠키에 저장된 정보는 쉽게 탈취될 수 있다.
- 예시: 개인정보나 신용카드 정보가 쿠키에 저장되면 로컬 PC나 네트워크 전송 구간에서 탈취될 수 있다.
- 해결책: 세션을 사용하면 중요한 정보는 서버에 저장되고, 클라이언트에는 추정 불가능한 세션 ID만 전달된다. 따라서 해커가 세션 ID를 탈취해도 중요한 정보를 쉽게 얻을 수 없습니다.
3. 세션을 사용한 보안 강화
- 임의의 토큰 사용: 예측 불가능한 임의의 세션 ID을 생성 후 서버에서 세션 ID과 사용자 ID를 매핑하여 관리한다.
- 세션 ID 만료 시간 설정: 세션 ID의 만료 시간을 짧게 유지(예: 30분)하거나 해킹이 의심될 경우 강제로 제거할 수 있다.
세션 동작 방식
-
로그인
- 사용자가
id
와 password
를 전달하면 서버에서 사용자 인증을 수행한다.
-
세션 생성
- 추정 불가능한 세션 ID(예: UUID)를 생성하고, 세션 저장소에 사용자 정보를 저장한다.
- 예시:
Cookie: mySessionId=zz0101xx-bab9-4b92-9b32-dadb280f4b61
-
세션 ID를 응답 쿠키로 전달
- 서버는 클라이언트에
mySessionId
쿠키를 전달한다.
- 클라이언트는 이 쿠키를 저장하고, 이후 요청 시 항상 이 쿠키를 서버에 전달한다.
-
세션 정보 조회
- 서버는 클라이언트가 전달한
mySessionId
쿠키를 기반으로 세션 저장소를 조회하여 사용자 정보를 확인한다.
쿠키와 비교한 세션의 장점
- 변조 방지: 세션 ID는 예측 불가능한 복잡한 값으로 설정된다.
- 정보 보호: 쿠키에 중요한 정보를 저장하지 않으므로 쿠키가 탈취되더라도 중요한 정보는 보호된다.
- 세션 ID 만료 관리: 해커가 세션 ID을 탈취해도 시간이 지나면 사용할 수 없도록 만료 시간을 짧게 설정할 수 있다.