1. Question

웹에서의 세션 기반 인증(Session-Based Authentication)이란?

2. Answer

웹에서의 세션 기반 인증(Session-Based Authentication)은 사용자의 인증 정보를 메모리나 데이터베이스에 저장된 세션에 연결하여 사용하는 방법이다. 사용자가 인증 절차를 성공적으로 거치면, 서버는 유니크한 세션 ID를 생성하고 이를 사용자에게 발급한다. 이 인증 방식은 웹 사이트나 웹 애플리케이션에 접근할 때 사용되며, 다음과 같은 절차로 진행된다.

A. 로그인 과정

  • 사용자가 아이디와 비밀번호 등의 인증 정보를 입력하여 로그인을 시도한다.
  • 서버는 사용자의 인증 정보를 검증하고, 올바른 경우 사용자에 대한 세션을 생성한다.

B. 세션 ID 생성 및 쿠키 설정

  • 세션 생성 시, 서버는 유니크한 세션 ID를 생성하고 이를 쿠키에 저장하여 클라이언트(브라우저)에 전달한다.
  • 클라이언트는 이후 서버로 요청을 보낼 때마다 이 쿠키를 HTTP request와 함께 전송한다.

C. 서버의 세션 검증

  • 서버는 클라이언트로부터 받은 request에 포함된 세션 ID를 자신의 세션 저장소에서 검증한다.
  • 검증이 성공하면 request를 인증된 사용자의 것으로 간주하고 처리한다. 검증에 실패하면 사용자를 인증하지 않은 것으로 간주하고, 추가적인 인증을 요구하거나 접근을 거부한다.

3. Detail

A. 보안 측면 - 세션 하이재킹

세션 하이재킹은 공격자가 사용자의 세션 ID를 탈취하여 그 사용자로서 시스템에 접근하는 공격이다. 이 공격은 주로 사용자가 세션 ID를 포함한 쿠키를 네트워크를 통해 전송할 때 발생할 수 있다. 예를 들어, 사용자가 비암호화된 네트워크에서 웹 사이트에 접속하면, 공격자는 네트워크 스니핑을 통해 세션 쿠키를 탈취할 수 있다.

  • HTTPS 사용: 모든 데이터 전송을 암호화하여 세션 탈취를 방지한다.
  • 세션 ID의 정기적 변경: 인증 후 새로운 세션 ID를 발급하고, 중요한 트랜잭션을 수행할 때마다 세션 ID를 갱신한다.
  • 세션 ID의 무작위성과 복잡성 확보: 세션 ID가 예측하기 어렵도록 충분히 복잡하고 무작위로 생성되어야 한다.

B. 보안 측면 - 쿠키 보안

쿠키는 사용자 인증 정보(세션 ID 포함)를 저장하기 위해 널리 사용되는데, 쿠키가 적절하게 보호되지 않으면 해커가 쿠키를 탈취하거나 조작할 수 있다.

  • HttpOnly 속성 사용: JavaScript 등 클라이언트 사이드 스크립트를 통한 쿠키 접근을 차단한다.
  • Secure 속성 사용: 쿠키가 HTTPS를 통해서만 전송되도록 한다.
  • SameSite 속성 사용: CSRF 공격을 방지하기 위해 쿠키가 동일한 사이트에서만 전송되도록 설정할 수 있다.

C. 사용 시 고려사항 - 확장성 문제

세션 데이터가 서버의 메모리에 저장될 때, 대규모 사용자를 수용하거나, 여러 서버 또는 다중 서버 환경에서는 세션 데이터를 관리하고 동기화하는 데 문제가 발생할 수 있다.

  • 세션 클러스터링: 여러 서버가 세션 정보를 공유할 수 있도록 구성한다.
  • 외부 세션 저장소 사용: Redis, Memcached 등 외부 세션 저장소를 사용하여 세션을 관리하고, 서버 간의 세션 공유 문제를 해결한다.

D. 사용 시 고려사항 - 세션 관리

서버는 세션의 생명 주기를 관리해야 하며, 사용자의 로그아웃 또는 세션 만료 후에 세션을 안전하게 삭제하고 새 세션을 생성해야 한다.

  • 세션 만료 정책 설정: 세션의 유효 기간을 설정하고, 만료된 세션은 자동으로 삭제된다.
  • 로그아웃 구현: 사용자가 로그아웃을 요청하면 서버는 해당 사용자의 세션을 즉시 삭제하고, 모든 세션 쿠키를 무효화한다.

4. Reference

None

댓글남기기