JWT 대충쓰면 인생 끝난다고 함

Dev_Gony·2024년 3월 11일
0

기초지식

목록 보기
2/3

회원기능을 구현할 때, JWT 기능쓰라고 들었었음

사실 JWT가 그냥 좋다~ 하니까 그런갑다~ 했는데 나중에 면접에서

"JWT말고 다른거 쓸 생각은 안해봤어요?"

라고 물어보면

" 어.. 음... 오 아 예....

라고 대답할거 같아서 슥 봐보기로함


JWT(JSON WEB TOKEN) 란?

JSON 웹 토큰은 두 당사자 간의 청구를 안전하게 표현하기 위한 개방형 업계 표준 RFC 7519 방법이라고 하는데, 음... 안전하다는데 그냥 쓰면 안되나 무튼...

강의에서는 보안상의 헛점이 있어서 위험하다고 함


배경지식 : 회원기능 구현하는법

어떤 사이트(ex 드라마시청사이트) 에서 로그인한 사람만 해당 드라마를 보여주고 싶은거임
그럼 회원기능에는 2가지 방식을 사용하는데 동작방식은 둘다 비슷

입장권에 쓰여있는 정보만 다름

  1. session
    서버한테 입장권 제시 -> 입장권 확인 (문제없음) -> 입장 ㄱㄱ

세션에는 간단한 정보만 들어가있음
세션스코어?

  1. token
    얘는 입장권에 써있는 정보가 많음
    유효기간만 확인하고 안지났으면 입장

그럼 왜 JWT방식을 사용하냐?

장점 : stateless 함
( 회원이 많아질수록 부담이 적어짐 )

무슨 말이냐면 세션방식은 입장권을 하나하나 다까보면서 확인하는데
JWT는 그냥 입장권을 안까고 지나간다고 해석했음

이것은 마치 롯데월드 자유이용권이나
클럽에 가본적은 없지만 클럽팔찌, 클럽도장을 슥 보여주면 바로 통과하는게 JWT방식

입장할 때마다 지갑에서 신분증(주민등록증, 운전면허증, 여권 등등)을
꺼내서 직원이 확인하는게 세션방식

그러면 이제 JWT방식은 아주 빠른처리와 줄도 안밀리겠지만
세션방식은 일본처럼 아주 정석아날로그 거북이처럼 느리고 줄도 엄청 밀릴거임!

........이렇게 이해하는게 맞겠지?

그래서 JWT를 쓴다고 함

와 이해미쳤따 스스로 감탄중

하지만 여기서 대충쓰면 보안이슈 4개정도 생긴다함


https://jwt.io/

사이트에 들어가보게되면 JWT입장권을 받을 수 있는데

문제1 : "alg" 부분을 none 공격

간혹 입장되는 서버들이 있다고 함
하지맍, 최신라이브러리 잘 쓰면 걱정할필요까진 없다고 함

문제2 : JWT는 변환이 쉬움

민감한 내용을 넣으면 안됨
예를들면 나의 몸무게(?) 같은 거말고 주민등록번호 그런거?
why? 디코딩하기 굉장히 쉽기때문

문제3 : 시크릿키 문제

대충적는사람이 너무 많음
유튜브강의들 그대로 베끼면 인생 쫑난다고함 으어어억.....
해결 방법은
1. 키를 매우 어렵고길게
2. 공유금지
3.생성용키/검증용키 2개 사용

문제4 : jwt 탈취

이건 깊게 생각할 필요없이 헬스입장권 생각하면 됨
이건 본인잘못임!

해결
1. 훔치기 어렵게(HttpOnly cookie)
2. jwt 블랙리스트 (특정입장권 입장금지) 하지만 이렇게짜면 세션이랑 다를게 없음
3. jwt 유효기간 짧게 (5분) - 이거쓰려면 refresh token (유효기간 1년 ) 사용하면됨
근데 Refresh token도 탈취당할 수 있으니 Refresh token rotation 이 필요하다함

아니 이건 뭐 계왕권 2배에서 4배 8배 가는거 같냐... 무튼
refresh token은 언제나 1회용으로 사용해야 안전하다함!


결론

사용자가 엄청많지않다면 옛날 session 방식쓰자

그래도 JWT쓴다면 그냥 다른업체 인증서 같이 잘 쓰도록하자


일단 Django서비스 회원기능구현은 어떻게할지 고민좀 해봐야할듯 크흠흠...

출저 : 코딩애플 (유튜브)

profile
잔디심는 코린이

0개의 댓글

관련 채용 정보