본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Session Management
사용자와 시스템 사이, 또는 시스템 간에 활성화된 접속(세션)을 생성·유지·종료하는 보안 기능

HTTP 처럼 상태가 없는 프로토콜에서 '누가 로그인해 있는가'를 이어 가려면 세션이 필요하고, 그 세션 자체가 공격 대상이 된다.

시스템 보안 기능 속의 위치

편집 원본 편집
기능 하는 일
계정과 패스워드 관리 사용자를 식별하고 인증한다
세션 관리 인증된 뒤의 활성 접속을 관리한다
파일 관리 파일 접근 권한을 통제한다
로그 관리 행위를 기록한다
취약점 관리 패치와 설정을 점검한다

웹의 세션은 서버가 사용자별 상태를 저장하고, 클라이언트에는 그 상태를 찾아갈 세션 ID 만 쿠키로 준다.

구분 세션 쿠키
저장 위치 서버 클라이언트(브라우저)
클라이언트가 가진 것 세션 ID 하나 값 자체
보안 값이 서버에 있어 상대적으로 안전 사용자가 보고 고칠 수 있다
  • 요청에 세션 ID 가 없거나 만료된 ID 면 서버가 새 세션을 만들고 ID 를 발행해 쿠키로 내려 준다.
  • 세션은 서버에 있지만 클라이언트도 로그아웃 요청으로 종료시킬 수 있다. 서버는 그때 세션을 파기한다.
  • 세션 타임아웃은 일정 시간 요청이 없을 때 서버가 세션을 자동으로 끝내는 시간이다.
  • 세션 값을 클라이언트에 맡기면 사용자가 그 값을 바꿀 수 있으므로 세션의 의미가 없어진다. 세션 값은 서버에만 두고, 클라이언트에는 추측할 수 없는 ID 만 준다.
  • 세션 하이재킹 방지 — 예측 불가능한 난수로 세션 ID 생성, 충분한 길이(128비트 이상)
  • 전송 보호 — HTTPS 강제, 쿠키에 `Secure` · `HttpOnly` · `SameSite` 속성 부여
  • 세션 고정(Session Fixation) 방지 — 로그인 성공 시 세션 ID 를 새로 발급한다
  • 타임아웃 — 일정 시간 입력이 없으면 세션을 끊는다. 절대 만료 시간도 둔다
  • 정상 종료 — 로그아웃 시 서버 측 세션을 실제로 파기한다. 쿠키만 지우는 것으로는 부족하다
  • 동시 접속 통제 — 같은 계정의 중복 로그인을 제한하거나 이전 세션을 끊는다
  • 중요한 거래 전 재인증

쿠키·세션 위조 방지

편집 원본 편집

쿠키나 세션 값을 조작해 다른 사용자로 행세하는 공격(쿠키/세션 위조)을 막는 방법이다.

  • 세션 관리 정보는 모두 서버 측에 저장·관리한다. 클라이언트에는 추측할 수 없는 세션 ID 만 준다
  • 중요한 기능에는 SMS 인증·OTP 같은 2차 인증을 더한다
  • 쿠키 값은 사용자가 바꿀 수 있는 불완전한 정보이므로, 쿠키에 꼭 담아야 할 값은 암호화하고 서명(HMAC)을 붙여 변조를 확인한다 → 쿠키
  • 세션 ID 는 로그인 때마다 새로 발급하고 일정 시간 뒤 만료시킨다
  • 입력값을 검증해 SQL 을 주입하는 SQL 인젝션, 스크립트를 심는 크로스사이트 스크립트와는 대응 방법이 다르다
  • 세션 하이재킹 — 세션 ID 탈취
  • 세션 고정 — 공격자가 정한 세션 ID 를 피해자가 쓰게 만든다
  • CSRF — 인증된 세션을 도용해 원치 않는 요청을 보낸다
  • XSS 를 통한 쿠키 탈취