browser

브라우저 스토리지 비교

브라우저별로 저장가능한 스토리지(cookie, localstorage, sessionstorage, indexeddb)에 대한 정보를 기술함.

Mimul
MimulApril 30, 2018 · 6 min read · Last Updated:

프론트엔드 개발을 하다보면 항상 마주하는 것들 중에 하나가 브라우저 스토리지의 활용이다. 실수를 하게되면 보안 이슈도 생기고 고객에게 불편을 전가되는 특성이 있다. 그래서 기본적인 특성을 정리해 본다.

4개의 브라우저 스토리지의 차이와 특징

1. 데이터 라이프 사이클

스토리지보존 기간라이프 사이클
localStorage반영구적사용자가 수동으로 삭제할 때까지(또는 코드로 삭제)
sessionStorage페이지 세션 중브라우저 탭/창을 닫으면 사라짐
Cookie설정에 따라 가변만료일 설정 가능(Max-Age, Expires 속성)
IndexedDB반영구적사용자가 수동으로 삭제할 때 없어짐
  1. 용량 정책
스토리지사이즈 상한용도
Cookie약 4KB(도메인당)작은 식별자, 토큰
lcalStorage5 ~ 10MB설정 정보, 경량 데이터
sessionStorage5 ~ 10MB임시 경량 데이터
IndexedDB사용 가능한 디스크 공간에 따라 다름(일반적으로 수백MB 이상)대용량 데이터, 오프라인 대응

참조 사이트

  1. 보안 정책

각 스토리지별로 XSS 취약점은 아래와 같다.

스토리지JavaScript 액세스XSS 공격의 위험
localStorage가능높음 (훔칠 가능성)
sessionStorage가능높음 (훔칠 가능성)
Cookie(HttpOnly 없음)가능높음 (훔칠 가능성)
Cookie(HttpOnly)불가능낮음 (보호됨)
IndexedDB가능높음 (훔칠 가능성)

인증 토큰과 같은 중요한 정보는 HttpOnly가 있는 쿠키에 저장하는 것이 가장 안전핟. localStorage나 sessionStorage에 저장하면 XSS 공격으로 도난당할 수 있다.

CSRF(Cross-Site Request Forgery) 공격은 사용자가 의도하지 않은 요청을 다른 사이트에서 보내는 공격을 말한다. 이것은 SameSite 속성으로 방어가 가능하다.

SameSite 값동작용도
Strict다른 사이트의 요청으로는 전송하지 않음가장 안전함(인증 쿠키 권장)
Lax최상위 네비게이션(GET 요청)만 전송일반 용도(기본값)
None모든 요청에 보내기(Secure 속성 필요)크로스 사이트에서 필요한 경우에
  1. 성능 (속도 및 효율)
스토리지액세스 속도서버 통신특징
localStorage동기화(블로킹)없음작은 데이터라면 고속
sessionStorage동기화(블로킹)없음localStorage와 동등
Cookie동기화(블로킹)예(자동 전송)HTTP 요청마다 전송되므로 크기가 크면 느림
IndexedDB비동기(논블로킹)없음대용량 데이터에서도 UI를 차단하지 않음

사용 사례별 스토리지 선택 방법

1. 인증 토큰 저장

HttpOnly + Secure + SameSite가 있는 쿠키를 사용하자. XSS 공격으로 토큰을 훔치는 위험을 최소화해야하고 자동으로 만료일을 설정할 수 있고, 서버에 대한 요청으로 자동 전송이 가능한 장점이 있다. localStorage에 인증 토큰을 저장할 수 있는데, XSS 공격으로 토큰이 도난당할 수 있어 보안 위험이 높기 때문에 권장되지 않는다.

2. 사용자 설정(테마, 언어 등)

localStorage를 활용하자. 브라우저를 닫아도 설정이 남아 있고 서버로 전송할 필요 없어 통신량이 감소하고 구현하기 편하다.

3. 임시 정보 저장

임시 입력 정보는 sessionStorage가 적합하다. 탭을 닫으면 자동으로 사라져 개인정보 보호도 가능하고 페이지 새로고침에 보관되고 다른 탭에 영향을 미치지 않는다.

4. 대용량 데이터 저장(오프라인 지원)

IndexedDB가 적합하다. 브라우저 및 디스크 용량에 따라 다르지만 대용량 데이터 저장이 가능하고 비동기 처리로 UI를 차단하지 않으며 복잡한 데이터 구조를 직접 저장할 수 있고 오프라인에서도 작동한다.

5. 추적 분석

쿠키(타사 쿠키)가 적합하다. 여러 도메인 간에 사용자를 식별할 수 있고 만료일을 장기간으로 설정할 수 있고 광고 및 애널리틱스 서비스에서 표준으로 사용하고 있다.


Mimul

Written byMimul
Mimul is a programmer, technologist, exercise enthusiast and more.
Connect

Related ArticlesView All

Related StoriesView All