카테고리 없음

LocalStorage vs Cookies : JWT 토큰 안전하게 하기위한 방안

이채야채 2024. 4. 9. 18:04

session ID는 서버에 많은 부담을 주기때문에 인가를 하기위해 나온 방식이 Token이다.주로 JWT토큰을 사용하여 처리하는데 -Access token-Refresh token두가지를 가지고있다.

 

(서버측에서)

Access token은 짧은 생명주기를 가지고, 서버로부터 승일을 받아 인증이 필요한 모든 HTTP request에 포함되어 간다.

그에반해 Refresh token은 보통 긴 수명 주기를 가지고, DB에 저장되어 access token이 만료되었을때 새로운 

access token을 발급해준다.

 

(클라이언트)

받아온 token을 어디에 저장해야할까?

 

local storage, cookies 두가지 방식이있는데 장단점을 봐보자

 

local storage

 

장점 - 편리성

pure javascript로 편리한 장점이있다. 만약, back-end 없이 third party api로 의존을 한다고한다면,

매번 third party api에 쿠키를 셋팅 할 수 없을 것이다.

 

단점 - XSS공격에 취약하다.

 

local storage에 저장되어있는 access token을 탈취 할 수 있다.

웹사이트에 포함된 third-party javascript코드에 의해서 발생할 수있다. (리액트, 뷰 등등)

 

Cookies

 

장점- javasciprt로 접근이 불가능. XSS공격에 비교적 덜 취약

cookie의 secure옵션, httpOnly를 한다면 괜찮다고한다.

 

쿠키는 자도응로 요청에 포함

 

단점 - 서버에서 authorization header에 해달라고한다면 , 사용할수없고 용량이 작다.

 

XSS공격.

local storage는 자바스크립트를 사용해서 접근이가능한 반면에

쿠키는 secure, httpOnly를 사용하면 접근이 불가능하지만 그렇다고 완전히 공격에 안전한것은 아니다.

-> httpOnly하면 window. cookie뭐 이런식으로 쿠키 탈취가 불가능.

 

 

쿠키와 CSFR 공격

유저가 의도하지않은 요청을 하도록 만든느 공격

same-site, anti-CSFR Tokens를 사용하면 어느정도 예방이 가능하다.

 

 

가장좋은 방법은 refresh token을 httpOnly cookie에 저장하라: CSRF 공격으로부터 안전하고, XSS 노출에 대해서는 조금 더 낫다.

 


 

XSS

해커는 악의적인 공격을 하는것인데 =  크로스 사이트 스크립팅

 

해커가 서버에 입력을 하고, 희생자가 웹페이지를 봤을때 크로스 사이트 스크립팅으로 피해를 입게된다.

글을 쓰는것이아닌 자바스크립트 코드를 인젝션하게된다.

스크립트 랭기지가 실행되면서 => 피해를 입게되는 구조이다.

 

어떤 스크립트를 쓰느냐에 따라서 피해정도가 다른다.

httprequest를 만들어주고 Url을 서버에 url로 지정하고 쿠키를 넣어줘서

Get requestf를 만들수가있다. 

서버에 접속했을때 만들어진 쿠키가 -> 전부 쿠키로 가져올 수 가 있다.

 

쿠키안에 세션 아이디가있으면? 세션아이드를 가지고 서버에 접속해서 

모든 정보를 빼갈 수 있다.

cors이 될 수도 있다. 

 

방지하기위해서 - script가 플레인 텍스트로 보여지게 하는 그런 내용을 써야된다.

 

CSFR = 크로스 사이트 리케스트 뽀져리

링크를 클릭하면 = 서버에게 어떤 요청을 하는것이다.

a라는 페이지를 줘, b라는 페이지를줘 

어떤 처리를 요청. 로그인할껀데 아이디 비번 이거야~

 

요청 위조하는방법 : 

서버야 나 계좌번호 a라는 곳에 100만원 보내줘 이런식의 링크를 만들게된다.

이 링크를 뿌리게된다. 호기심에 클릭하면 털려버린다.