HTTP 프로토콜의 약점을 보완하기 위해 사용
웹 개발에서 사용자의 상태를 관리하는 데 필수적인 기술로 쿠키(Cookie)와 세션(Session)이 있다.
HTTP 프로토콜은 Connectionless, Stateless 라는 특징을 갖고 있어서 서버와 클라이언트가 통신을 할 때, 통신이 연속적으로 이어지지 않고 한 번 통신이 되면 끊어지게 된다.
통신이 끊어지면 상태 정보가 없어지기 때문에 매번 페이지를 이동할 때마다 로그인을 다시 하거나 장바구니에 선택한 상품의 정보가 없는 등의 문제가 생길 수 있다.
이러한 문제를 해결하는 방법이 바로 쿠키와 세션이다.
웹 사이트에 방문 했을 때, 클라이언트(브라우저)에 저장되는 key-value 형태의 작은 데이터 파일
쿠키가 한 번 생성되면 브라우저는 해당 쿠키 정보를 기억하여 동일한 서버에 재요청시 저장된 데이터를 함께 서버로 전달한다.
쿠키는 사용자 경험을 개선하기 위해!
1. 세션 관리: 로그린, 사용자 닉네임, 접속 시간, 장바구니 등 서버가 알아야할 정보 저장
2. 개인화: 사용자마다 다르게 사용자 맞춤형 페이지(테마 등)를 보여줄 수 있다.
3. 트래킹: 사용자의 행동과 패턴을 분석하고 기록한다.
쿠키는 클라이언트 측에 저장되기 때문에 XSS(크로스 사이트 스크립팅) 공격이나 쿠키 탈취 등 보안 위협에 노출될 수 있다.
이를 방지하기 위한 방법이 2가지 있다.
1. HttpOnly
쿠키는 클라이언트에서 자바스크립트로 조회할 수 있기때문에, 보안에 취약하다.
그래서 HttpOnly를 사용하여 브라우저에서 쿠키에 접근할 수 없도록 제한한다. (자바스크립트로 쿠키를 접근하지 못하게 막는 옵션)Set-Cookie: 쿠키명=쿠키값; path=/; HttpOnly
2.Secure
HttpOnly를 사용하면 JavaSciprt로 접근은 막을 수 있지만, 네트워크상의 정보 유출은 막을 수 없다.
Secure옵션을 사용하면 브라우저는 HTTPS가 아닌 통신에서는 쿠키를 전송하지 않는다. 즉, 쿠키를암호화할 수 있다.Set-Cookie: 쿠키명=쿠키값; path=/; secure
XSS
XSS(Cross Site Scripting)는 웹 서버 사용자에 대한 입력값 검증이 미흡할 때 발생하는 취약점으로, 주로 여러 사용자가 보는 게시판이나 메일 등을 통해 악성 스크립트를 삽입하는 공격 기법.
일반적으로 사용자 쿠키/세션 값 탈취, 키보드 입력값 탈취 등이 가능하며, 피싱 사이트와 같은 악성 사이트로의 접근 유도가 가능해 사용자에게 직접적인 피해를 줄 수 있다.
서버 측에서 사용자 정보를 저장하는 방식
서버는 각 클라이언트에 고유 세션 ID를 할당
🔜 이 ID를 통해 사용자의 상태를 관리하고, 쿠키에 비해 보안성이 높은 정보를 저장
세션 정보는 서버에 저장되기 때문에 클라이언트 측에서 직접 접근할 수 X
세션은 서버에서 사용자의 상태를 유지하기 위해 사용
세션은 사용자의 상태를일시적으로 관리하기 위한 목적
보안적으로 중요한 정보들을 서버 안에서 다루기 위해 사용
세션의 내용은 서버에 저장하기 때문에 많아질 경우 서버에 부하가 발생할 수 있음
정보가 서버에 저장되어있기 때문에, 쿠키에 비해 비교적 속도가 느림
HTTP 통신은 비연결성이고 상태정보를 저장하지 않기 때문에, 서버와 클라이언트의 통신이 끊어지는 경우에 사용자의 상태를 저장하기 위해 사용합니다.
쿠키와 세션의 차이는?쿠키는 클라이언트 측의 웹 브라우저에 데이터가 저장되며, 세션은 서버 측에 저장됩니다.
쿠키는 사용자의 브라우저를 통해 서버와 데이터를 주고받기 위해 설계되었으며, 세션은 서버에서 사용자의 상태를 유지하기 위해 사용됩니다.
또한 쿠키는 사용자가 직접 삭제하지 않으면, 만료 기간 전까지 유지되지만, 세션은 사용자가 로그아웃하거나 브라우저를 닫을 때 종료됩니다.
쿠키(Cookie) & 세션(Session)
쿠키와 세션의 차이점 및 보안 고려사항
[Web] HTTP Only와 Secure Cookie 이해하기
출처: https://nsinc.tistory.com/121 [NakedStrength:티스토리]