웹스토리지, 쿠키 :해당 도메인에 대한 데이터를 브라우저에 저장한다.
쿠키
- 서버가 클라이언트에게 전송하는 작은 데이터 파일
- 이름, 값, 도메인 정보, 경로 정보, 만료 일자와 시간 등
- 시간 설정 가능
- 모든 브라우저에서 지원을 하지만 매번 서버에 전송이 되고 저장 용량이 작고 보안에 취약하다는 단점이 있다.
>> HTML5부터는 쿠키의 단점을 보완해 등장한 웹스토리지를 주로 사용
- 쿠키의 부족한 저장 용량 문제 해결 - 5MB 저장 용량
- 쿠키의 CSRF, 트래픽 문제 해결 - 요청시 headers에 전송하지 않음
- 직렬화를 통해 객체도 저장 가능 - 문자열만 저장 가능(쿠키와 동일)
웹스토리지
- 클라이언트에 저장만 할 뿐 서버로 전송되진 않는다.
- 키와 값의 형태로 데이터를 저장
- 지속성에 따라 로컬 스토리지와 세션 스토리지로 구분
- 단점:브라우저간 공유가 되지 않기에 다른 브라우저로 접속하거나 데스크탑과 모바일에서 다른 데이터를 볼 수도 있다/시간 설정을 할 수 없다.
- 로컬 스토리지:
- 브라우저 자체에 반영구적으로 데이터를 저장하고 브라우저를 종료해도 데이터가 유지된다.
- 도메인 ,브라우저 별로 독립된 스토리지를 사용하기 때문에 다른 웹사이트에 들어가거나 브라우저가 변경된다면 로컬 스토리지가 동일하지 않음.
- 만료기간이 없어서 브라우저를 종료해도 삭제되지 않는다.
- 세션 스토리지:
- 탭 윈도우 단위로 생성이 되고 탭 윈도우를 닫을 때 데이터가 삭제된다.
- 탭별로 독립된 스토리지를 사용한다. 즉, 탭만 바뀌어도 세션 스토리지가 동일하지 않은 것
- 탭을 종료하거나 브라우저를 종료하면 삭제된다.
- 브라우저 종료시 삭제되어도 괜찮은 데이터인 경우에는 세션 스토리지에 저장하는 것을 추천
로컬 스토리지 | 세션 스토리지 | |
저장 범위 | 도메인 / 브라우저 | 도메인 / 브라우저 / 탭 |
삭제 시기 | 직접 삭제 시 | 탭 종료 시 |
쿠키 & 웹스토리지
보안 문제가 있기 때문에 민감한 정보는 저장X
아래는 추천 예시이므로, 특징을 고려하여 다르게 사용 가능
ex) 추천 저장 방법
쿠키 (기간 설정, 자동 서버 전송-작은 용량) |
n일 동안 보지 않기 팝업창 비로그인 장바구니 |
세션 스토리지 (탭 종료시 삭제되어도 ok) |
이전 페이지 저장 이전 스크롤 위치 저장 입력 폼 정보 비로그인 장바구니 기능 |
로컬 스토리지 (브라우저 종료 시 유지) |
사용자 설정 저장 글 임시 저장 자동 로그인 |
쿠키의 보안 문제 해결 방안
해결 방안 | 이유 | |
XSS | HttpOnly | 자바스크립트로 접근 불가 |
CSRF | SameSite Strict:모두 허용하지 않음 Lax: 안전한 GET요청만 허용(a tag) =>크롬은 기본적으로 Lax옵션이 설정되어 있다. |
같은 도메인의 요청에만 쿠키를 전송 |
Referer 검증 | 요청 온 사이트의 도메인을 확인할 수 있음 |
웹 스토리지의 보안 문제 해결 방안
해결 방안 | 이유 | |
XSS | innerHTML 사용 X (사용자의 입력이 자바스크립트 코드로 실행될 수 있는 코드 작성하지 않기 ex:innerHTML,eval,document,write) |
자바스크립트 코드 삽입 불가 |
>>하지만 innerHTML을 사용해야 한다면?
XSS 보안 라이브러리(sanitize-html,DOMPurify)사용
참고영상)
https://www.youtube.com/watch?v=5s--sLWzuZc
https://www.youtube.com/watch?v=-4ZsGy1LOiE
'React' 카테고리의 다른 글
[React] React의 렌더링 방식 (0) | 2023.12.13 |
---|---|
[React] React의 state (우아한테크 youtube정리) (0) | 2023.12.13 |
[React] src내에서 public 폴더 접근 방법 (0) | 2023.11.08 |
[React] port 기본3000> 원하는 port로 변경하기 (0) | 2023.11.02 |
[React] VS Code 단축키 자동완성 설정하기 (+TypeScript) (0) | 2023.09.13 |