세션이 jwt보다 보안상 더 뛰어난 이유가
1. 세션은 client 정보를 서버에서 보관하고, 클라이언트한테는 세션아이디만 보여주는데 비해, jwt는 유저 정보 담겨있기 때문에 탈취당하면 유저정보 노출의 위험성이 있다
2. 세션은 해킹됬다 감지되면 revoke해서 해킹된 세션 무효화 바로 할 수 있는데 jwt는 revoke 못한다.
3. 세션은 client side에서 보관시 HttpOnly cookie로 보관하기 떄문에 javascript로 접근 불가능해서 XSS 공격을 방어할 수 있다. 근데 jwt는 localStorage에 보관하기 때문에 XSS공격에 취약하다.
라는데,
1의 경우에 jwt의 payload에 유저 이름이랑 expire_at 만 적으면 털려도 상관없잖아? 유저 이름 노출된걸로 뭐 어쩔껀데?
2는 해커가 유저 JSESSION 쿠키 훔쳐서 http request보낸걸 감지할 수 있어야 세션 무효화 할 수 있는게 유효한거 아님? 유저 기기 mac 주소 등록시켜놓고 매번 요청 비교하는게 아닌이상 유저가 JSESSION 쿠키 보내는지 해커가 JSESSION 쿠키 보내는지 어떻게 아냐? http는 stateless하대매. session이 revoke할 수 있다 해도 사실상 별 의미없는거 아냐?
3. jwt도 HttpOnly Cookie에 보관시키면 되지 프론트 개발자 갈궈서.
곰곰히 생각해보니 session이나 jwt나 해커한테 탈취당하면 털리는건 매한가지인거 같은데,
여태껏 세션이 보안에 더 좋니 가스라이팅 당한거임?
cookie 보관은 결국 csrf 공격 취약점으로 이어짐. 세션이 보안이 더 뛰어나다는건 그냥 뇌피셜임. jwt가 어디서 보안이 쳐 약하다는 말이 튀어나온건지 모르겠는데, 오히려 단점으로 지목받으려면 io바운드를 줄이려는 대신에 네트워크 부하를 늘릴 가능성이 있다가 더 타당함.
세션이 보안이 더 뛰어나다는건 뇌피셜이군. 입력완료
io바운드를 줄인다는 백엔드 서버랑 데이터베이스 서버랑 통신이 줄어든다는걸 의미하고 네트워크 부하가 는다는건 jwt 토큰 만료될 때마다 refresh token으로 재발급 받는 것 때문에 클라이언트와 백엔드의 네트워크 부하가 늘어난다라고 이해하면 되는거지?
당장에 2000년도 2010년도 초반까지의 개좆병신같은 웹 취약점 공격 사례가 전부 쿠키 기반이었음.
JWT 가 문제가 되는 경우는 서버 시크릿이 탈취 당했거나, 사용자가 refresh token 을 유출했을 경우인데, 경우에 따라서 refresh token 역시 1 access token refresh 한정으로 사용하게 하면 그런 문제도 해결됨
서버 시크릿키가 탈취된 경우는 서버가 뚫렸다는거니까 아예 끝난거 아님? 이 경우는 session도 매한가지니까 퉁치고, session이나 jwt/refresh token이나 탈취당하면 털리는건 매한가지인데, session은 탈취당한걸 알아차리면 revoke 가능한게 장점이고 jwt는 refresh token rotation(RTR, refresh token 2회 이상 사용시 revoke) 하면 자동 revoke 시키는게 장점인데,
session의 경우 서버입장에서 session이 탈취 당했는 판별할 수 있는 여부가 사용자 기기 mac address db에 저장해놨다가 비교하는건데, 돈걸린 사이트 말고 이 방식 잘 안쓰지 않나? 이 방식이 보안적으로 제일 우수하고, 이렇게 안할거면 refresh token을 2번 쓸 때 바로 감지해서 jwt+refresh token을 바로 revoke 시키는 jwt + refresh token(RTR 기법)이 그 다음으로 보안이 우수하지 않나?
하나만 알고 둘은 모르네 jwt를 왜쓰는지 아키텍처부터 공부해
지금 글의 주제는 jwt가 session보다 왜 msa, scalable 아키텍처에 더 적합한가? 가 아니라, session이 jwt보다 왜 보안이 더 좋다고 하는데 사실 아닌가? 임
신경쓸게 상대적으로 적다는건 사실 아님?
구현 난이도를 말하는건가? 근데 큰 차이는 없는거같은데
세션은 jwt보다 보안에 취약할 수가 없음 그런 소릴 한다는 것 자체가 기본적인 이해가 부족하다는 증거야
그걸 사람들이 말하는걸 들었는데 생각해보니까 위에 이유로 jwt랑 보안 수준이 비슷한 것 같은데? 라는 생각이 들었다는거아녀.
session이 유저 mac address tracking해서 다르면 바로 revoke 시키는걸 구현하면 보안상 더 좋은건 알겠는데, 맥 어드레스 수집하는식으로 구현 안하고 그냥 default로 쓰면 jwt+refresh token이랑 보안 수준 비슷한거같은데?
비슷하기야 하지만, 굳이 따지면 세션이 보안 측면에선 우위에 있음
그니까 왜냐고 ㅋㅋ
묻지 말고 생각을 해라 단서는 이미 다 나와있어
단서가 나와있다는 말은 위에 적어놓은게 이유라는건데 그럼 생각할게 없다는거 아냐?
같은 이유인데 나는 session이나 jwt나 보안수준 비슷하다고 결론내린거고, 넌 그래도 session이 더 보안상 좋다고 결론내린거 아냐?
비슷하다는건 너의 기준이고 즉시 만료 가능하다는 특성은 보안에서 무시할만한 성질이 아니야
그리고 비슷하다는건 같지는 않다는거고 같지 않으면 무언가가 더 낫다 라고 정의할 수 있는거야 뭐때문에 그렇게 비슷함에 집착하는지는 모르겠다만 개발자라면 차이를 명확하게 짚어야지
그럼 보통 돈걸린 서비스 하는 곳은 유저 mac address 다 tracking한다는 말임? 이거 안하면 세션 즉시 만료하는 기준이 더 있나?
맥어드레스 트래킹은 왜 자꾸 언급하는지 모르겠다만.. 세션 방식은 별도의 장치가 없어도 즉시 만료가 가능하다
내 머릿속에 떠오른게 맥 어드래스 트래킹밖에 없어서 그럼
세션 방식이 어떻게 동작하는지도 잘 모르는 것 같은데.. 더 답해주기 귀찮다 공부해라
session즉시 만료할 떄가 mac address 다를 떄 밖에 없을 줄 알았는데, chatGPT한테 물어보니까 겁나 많네
ㅇㅋ ㄱㅅ