브라우저의 저장되는 작은 크키의 문자열. (최대 4KB까지 저장할 수 있다)
http의 비연결성, 무상태성 특징으로 인해 현재 요청하는 사용자의 정보를 알 수 없다.
이러한 상황에서 넷스케이프 웹 사이트 방문자가 이미 사이트를 방문했었는 지 확인하기 위해 처음 등장하게 되었다.
만료 기간에 따라 영구 쿠키와 세션 쿠키로 나뉜다.
만료 기간이 있다. 만료 기간이 끝난 후 삭제.
만료 기간이 없다. 브라우저 종료 시 삭제.
같은 도메인에서 생성된 쿠키, 서브도메인 경우 포함.
다른 도메인에서 생성된 쿠키.
해당 사이트에 다른 도메인의 스크립트가 존재할 때 생성된다.
스크립트 뿐만 아니라, 이미지, 폰트, 아이프레임 등 다른 도메인으로 요청을 해야 하는 경우에 언제든지 생성될 수 있다.
서드파티 쿠키는 주로 광고 목적으로 사용된다. 사용자가 어떤 사이트를 방문했었는지 알 수 있기 때문이다.
하지만 이것은 프라이버시를 침해하고, 개인정보악용에 대한 우려가 있기 때문에 크롬에서는 서드파티 쿠키의 지원을 중단하겠다는 계획을 발표하기도 했다.
보안적인 문제점: CSRF, XSS 에 노출되어 있다.
CSRF는 쿠키가 자동으로 전송된다는 특징을 이용해 사이트에 로그인이 되어 있는 사용자에게 악성 스크립트를 실행시켜 비밀번호를 변경하거나 결제 요청을 하는 등 악의적인 요청을 하는 것이다.
XSS는 Reflected, Stored, DOM-based로 세 가지 종류가 있지만, 원리와 목적은 같다. 악성 스크립트를 실행시켜서, 사용자의 토큰과 같은 민감한 정보를 탈취하는 것이다.
4KB의 부족한 저장 용량
http 요청 시 항상 자동으로 모든 쿠키를 전송 - 불필요한 트래픽 증가
HTML5에는 웹의 데이터를 클라이언트에 저장할 수 있는 새로운 자료구조인 Web Storage 스펙이 포함되어 있다.
Key-Value 형식으로 데이터를 저장하고, Key를 기반으로 데이터를 조회하는 패턴.
영구저장소(LocalStorage)와 임시저장소(SessionStorage)를 따로 두어, 데이터의 지속성을 구분할 수 있어 응용 환경에 맞는 선택이 가능하다.
WebStorage는 기존 웹 환경의 쿠키(Cookie)와 매우 유사한 개념이다. 거의 차이가 없지만 몇가지 쿠키의 단점을 극복하는 개선점이 도입됐다. (쿠키는 여전히 유효하고 꽤 적절한 클라이언트 저장도구이다)
Web Storage는 데이터의 지속성과 관련하여 두 가지 용도의 저장소를 제공한다.
Web Storage는 쿠키와 마찬가지로 사이트의 도메인 단위로 접근이 제한된다. (데이터 보안 측면에서 당연하다)
저장한 데이터를 명시적으로 지우지 않는 이상, 영구적으로 보관이 가능하다.
도메인마다 별도로 LocalStorage가 생성된다.
Windows 전역 객체의 LocalStorage 라는 컬렉션을 통해 저장과 조회가 이루어진다.
데이터 지속성과 액세스 범위에 특수한 제한이 존재한다.
Windows 전역 객체의 SessionStorage 라는 컬렉션을 통해 저장과 조회가 이루어진다.
SessionStorage는 데이터가 지속적으로 보관되지 않는다. 브라우저 기반 세션 쿠키와 그 성질이 비슷한데, 현재 페이지가 브라우징되고 있는 브라우저 컨텍스트 내에서만 데이터가 유지된다.
LocalStorage는 브라우저를 종료해도 데이터는 보관되어 다음번 접속해도 그 데이터를 사용할 수 있다. 반면 SessionStorage는 브라우저가 종료되면 데이터도 같이 지워진다.
즉, 브라우저가 종료되면 SessionStorage 도 삭제된다는 것이다.
SessionStorage 역시 Web Storage의 기본 보안처럼 도메인 별로 별도로 생성된다. SessionStorage는 같은 사이트의 같은 도메인이라 할지라도 브라우저가 다르면 서로 다른 영역이 된다.
탭 브라우징이나 브라우저를 하나 더 실행했을 때, 이 두 페이지의 SessionStroage는 각각 별개의 영역으로 서로 침범하지 못한다는 의미이다.
이는 도메인만 같으면 전역적으로 공유 가능한 LocalStorage와 구분되는 특징이다.
WebStorage의 보안은 서로 다른 도메인의 침범을 막고 있지만, 클라이언트 즉 사용자를 막고 있지는 않다. 클라이언트는 저장된 값을 임의로 수정이 가능하다. (이것은 쿠키와 동일한 개념)
쿠키에 비해 별다른 보안 취약점을 더 가진 것은 아니다. 따라서 개발자는 사용자에 의한 이러한 임의 변경에 항상 예의 주시하고 방어 코드의 작성을 잊지 말아야 한다.
쿠키와 웹 스토리지는 보안 문제가 있기 때문에 민감한 정보는 저장하지 않는 것이 바람직하다.
쿠키는 기간을 설정해야 하거나, 자동으로 서버로 전송되어야 하는 작은 용량의 데이터인 경우 사용할 수 있다.
Ex) n일 동안 보지 않기, 비로그인 장바구니 등
세션 스토리지는 탭을 종료 했을 때 삭제되어도 괜찮은 데이터 인 경우
Ex) 이전 페이지나 이전 스크롤 위치 저장 등
로컬 스토리지는 브라우저를 종료시키고도 유지되어야 하는 경우
Ex) 사용자 설정 저장, 글 임시 저장 등
참고