JWT 변조 공격으로 가장 흔한것은 Signature Stripping인데 헤더의 alg 클레임을
None으로 변조하는 공격으로 몇몇 JWT 라이브러리들이 alg가 None인 토큰을
유효한 토큰으로 인식하는 문제가 있습니다
웹 게시판등의 사용자가 입력한 값이 DB에 저장되고, 프론트엔드 단에 출력하는
구조를 가진 페이지에서 공격자가 <script>태그를 입력함으로서 공격이 성립할 수 있다
이 때 일반 쿠키 또는 세션 스토리지에 저장된 token을 탈취당할 수 있습니다
이를 방지하기 위해 쿠키의 다음과 같은 옵션을 이용합니다
유저가 특정 사이트 A의 유효한 쿠키를 가지고있는 상태에서 공격자가 그 쿠키를 이용해
사이트 A에 유효한 요청을 보내는 공격으로 XSS 또는 피싱사이트를 통해
유저가 공격자의 스크립트를 동작시키게되면 현재 브라우저의 쿠키를 이용해서 사이트 A에
접근하여 특정 동작을 수행하는 방식입니다
이를 방지하기 위해 다음과 같은 방법을 사용할 수 있습니다
short-lived token을 사용할 경우 토큰이 하이재킹 당하더라도
빠르게 만료되어 하이재킹에 대비할 수 있지만
사용자로 하여금 로그인을 자주 하도록 하는 불상사가 발생할 수 있습니다
이에 따라 short-lived token을 사용하기 위해서는
다음과 같은 보완방법이 필요합니다
글쓰기, 장바구니, 결제 등의 서비스를 이용할 때 중간에 토큰이 만료되지 않도록
특정 페이지에 접속 할 때 또는 클라이언트가 토큰의 iat(토큰 발급 시간) 을 참조해
새로운 토큰을 받아오는 방법
장점
사용자가 로그인을 할 때에 다음과 같은 두가지의 토큰을 발급합니다
클라이언트는 AccessToken이 만료되었다는 오류를 받으면 따로 저장해두었던 RefreshToken을 이용하여 AccessToken의 재발급을 요청합니다. 서버는 유효한 RefreshToken으로 요청이 들어오면 새로운 AccessToken을 발급하고, 만료된 RefreshToken으로 요청이 들어오면 오류를 반환해, 사용자에게 로그인을 요구합니다
AccessToken은 서버에 따로 저장해 둘 필요가 없지만, RefreshToken의 경우 서버의 stroage에 따로 저장해서 이후 검증에 활용해야 합니다. 그러므로 RefreshToken을 이용한다는 것은 추가적인 I/O 작업이 필요하다는 의미이며, 이는 I/O 작업이 필요없는 빠른 인증 처리를 장점으로 내세우는 JWT의 스펙에 포함되지 않는 부가적인 기술입니다
RefreshToken은 탈취되어서는 곤란하므로 클라이언트는 보안이 유지되는 공간에 이를 저장해두어야 합니다
장점
단점
역싀 백엔드 대장님... - addie