JWT 이 보안의 완벽한 해결책은 아닙니다
Payload 정보
JWT 의 payload 정보는 누구나 쉽게 디코딩할 수 있기 때문에 사용자의 아이디나 비밀번호 등 개인 정보를 담아 인코딩한다면 정보가 유출될 우려가 있다.
예방법 - 디코딩된 정보만 봐서는 어떤 사용자이고, 어떤 정보를 담고 있는지 알 수 없도록 해야한다.
JWT 유효기간 설정
Access Token 은 탈취의 가능성이 있기 때문에 유효기간을 되도록 짧게 두는 것이 좋다.
(유효기간을 두지 않을 수도 있다!)
None Attack
공격자가 Header 에 alg clame 을 none 으로 변조하였을 때, 이 토큰을 유효한 토큰으로 인식하면서 발생하는 문제
{
"alg": "None",
"typ": "JWT"
}
토큰 하이재킹
https://covenant.tistory.com/201
공격자에 의해 토큰이 가로채기 당하거나 도난을 당했을 경우, 시스템 접근 권한을 얻기 위해 악용될 수 있다.
예방법
- 공격자가 토큰을 하이재킹할 수 있으므로 JWT 보호를 위해 클라이언트에 전송될 때, 헤더 플래그를 설정해야 한다.
: Secure, HttpOnly, SameSite, Prefix 와 같은 보안 설정이 필요한다.
토큰 유효성 검증을 취소할 수단이 없음
토큰이 만료되기전에 사용자는 토큰 자체를 취소할 수 없게 된다. 즉, 공격을 당했을 때 사용자가 공격자를 차단할 수 없게 된다.
예방법
https://code-machina.github.io/2019/09/01/Security-On-JSON-Web-Token.html - 참고
token 의 블랙리스트를 구현하여 토큰 취소 관리를 합니다.
참고사이트
https://covenant.tistory.com/201
https://code-machina.github.io/2019/09/01/Security-On-JSON-Web-Token.html
'⚡ 기타 > 참고' 카테고리의 다른 글
로드 밸런싱이란? (0) | 2022.01.12 |
---|---|
Public Key Retrieval is not allowed, dbeaver mysql 접속 오류 (0) | 2022.01.04 |
xcode - undefined symbol: protocol descriptor for Swift.ExpressibleByFloatLiteral 에러 (0) | 2022.01.04 |
지도 API 사용에 필요한 좌표 얻기 (0) | 2022.01.03 |
JWT 정리 1 - JWT 란 무엇일까 (0) | 2022.01.02 |