JHipster存储JWT令牌至localStorage被盗后无密码登录问题咨询
结论
是的,黑客只要窃取到你有效的JWT令牌,无需账号密码即可直接登录对应账号。
原因说明
JWT是无状态的身份凭证,服务端对JWT的校验逻辑仅包含两个核心判断:
- 令牌的签名是否和服务端签发的一致,没有被篡改
- 令牌当前是否处于有效有效期内
只要满足以上两个条件,服务端就会将持有该令牌的请求判定为对应用户的合法请求,不会额外校验请求的发起设备、浏览器环境等信息。你自己测试时跨浏览器粘贴令牌即可登录的场景,和黑客窃取令牌后在自己设备上使用的逻辑完全一致,服务端没有能力区分操作人是账号本人还是窃取令牌的攻击者。
额外风险提示
JHipster默认将JWT存储在localStorage中,该存储区域可以被同域下的任意JavaScript代码读取。如果你的站点存在XSS跨站脚本漏洞,黑客可以非常轻松的窃取到存储在localStorage中的JWT令牌,进而直接接管你的账号。
缓解方案
你可以通过以下手段降低令牌泄露带来的风险:
- 缩短JWT的有效时长,缩小令牌泄露后可被利用的时间窗口
- 配置JWT黑名单机制,用户主动登出或者系统检测到异常操作时,将对应令牌加入黑名单,服务端校验时增加黑名单校验逻辑
- 优先选择将JWT存储在带
HttpOnly、Secure属性的Cookie中,避免令牌被XSS漏洞读取,同时配套开启CSRF防护 - 增加业务层的异常操作校验,当请求的IP属地、设备指纹等信息出现大幅变更时,触发二次身份校验逻辑
内容的提问来源于stack exchange,提问作者VendettaV
相关产品推荐
相关产品推荐

