프론트엔드에서 세션과 쿠키 관리는 웹 애플리케이션 보안의 핵심이다. 이 두 가지는 사용자 상태를 유지하거나, 사용자 인증 정보를 관리하는 데 사용된다. 그럼 지금부터 각각의 관리 방식과 관련된 보안 이슈, 그리고 이를 완화하는 방법을 알아보자.
(1) 세션(Session)
세션(Session)은 서버에서 사용자의 상태나 정보를 저장하기 위한 방법이다. 사용자가 웹사이트를 방문하면 서버는 그 사용자에 대한 세션을 생성하고, 그 세션에 고유한 식별자(Session ID)를 부여한다. 이 식별자는 사용자의 요청마다 서버에 전달되며, 서버는 이를 통해 어떤 사용자가 어떤 세션에 속해 있는지 식별한다. 세션 데이터는 주로 서버에 저장되며, 사용자가 웹사이트를 떠나거나 일정 시간이 지나면 세션이 만료된다. 세션은 로그인 상태 유지와 같이 보안이 중요한 정보를 관리할 때 주로 사용된다.
(2) 쿠키(Cookie)
쿠키(Cookie)는 클라이언트 측(사용자의 브라우저)에 저장되는 작은 데이터 조각이다. 웹사이트는 사용자가 웹사이트를 방문할 때 쿠키를 생성하고, 이후 방문 시 해당 쿠키를 통해 사용자의 이전 방문 정보를 읽을 수 있다. 쿠키는 일반적으로 사용자의 브라우저에 저장되며, 브라우저가 닫히거나 사용자가 삭제하지 않는 한 쿠키는 지속적으로 유지된다. 쿠키는 사용자 선호도, 장바구니 정보, 로그인 상태 등을 저장하는 데 자주 사용한다.
1) 쿠키의 사용 목적
2) 쿠키 보안 리스크
3) 쿠키 보안 설정
(3) 세션과 쿠키의 비교
세션과 쿠키의 차이점으로는 저장 위치와 보안성, 만료 시점이 있다. 세션 데이터는 서버 측에 저장되며, 세션 ID만 쿠키에 저장되는 반면, 쿠키 데이터는 클라이언트 측에 직접 저장된다. 세션은 서버에서 관리되므로 쿠키에 비해 더 안전하지만, 쿠키는 클라이언트 측에 저장되므로 보안 취약점이 존재할 수 있다. 또한 세션은 일정 시간이 지나면 만료되지만 쿠키는 서버가 설정한 만료 시간에 따라 브라우저가 닫혀도 유지될 수 있다. 이를 보기 쉽게 표로 표현하면 아래와 같다.
항목 | 세션(Session) | 쿠키(Cookie) |
저장 위치 | 서버 | 클라이언트(사용자의 브라우저) |
저장 형태 | 서버에 저장된 데이터 및 식별자(Session ID) | 클라이언트에 저장된 텍스트 파일 또는 데이터 조각 |
보안 | 상대적으로 안전(서버에 저장) | 보안에 취약(사용자가 쉽게 접근 및 수정 가능) |
만료 | 사용자가 브라우저를 닫거나 세션이 만료되면 종료 | 만료 기간까지 유지(브라우저에 따라 지속) |