sessionStorage 与 cookie 中的 JWT 令牌?

Posted

技术标签:

【中文标题】sessionStorage 与 cookie 中的 JWT 令牌?【英文标题】:JWT tokens in sessionStorage vs cookies? 【发布时间】:2016-10-12 18:19:00 【问题描述】:

Stormpath 有很多博客文章讨论应该如何使用 cookie 来存储 JWT,而不是 sessionStorage/localStorage:

https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage https://stormpath.com/blog/token-auth-spa https://stormpath.com/blog/build-secure-user-interfaces-using-jwts

主要原因是,如果您加载的第 3 方 javascript 依赖项受到损害,它可能会通过 sessionStorage/localStorage 窃取并将 JWT 传输到某个地方。

但这对我来说是一个令人困惑的理由。我了解攻击向量,但如果你有一个受损的 3rd-party javascript 依赖项,你是不是真的搞砸了,因为它可以监听/捕获用户在与你的应用交互时所做的任何事情?

【问题讨论】:

你可以为所欲为,但不能窃取令牌。 【参考方案1】:

我是https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage的作者

当页面上存在 XSS 时,攻击者有权:

HTML5 网络存储(本地和会话) 未使用 httpOnly 标志设置的 Cookie 控制选项卡直到它关闭并且能够提出未经授权的请求

您还可以开始制定攻击以绕过 XSRF 保护。

当存在 XSRF 漏洞时,攻击者有权:

从第三方域发出未经授权的请求,前提是您可以将用户引诱到那里(或在存在 XSS 的情况下将其发送到那里)。

您可以看到,当存在 XSS 漏洞时,您可以发出未经授权的请求,而攻击者需要跳过更多的障碍来利用 XSRF。这意味着当 XSS 存在时(无论是否有 XSRF 保护),都会存在发出未授权请求的攻击向量。

希望这可以为我的下一点解决问题。

与窃取代表用户身份和会话的无状态令牌相比,XSRF 攻击或未经授权的请求的影响和范围更小。泄露令牌意味着攻击者将拥有完全控制权,可以代表用户在他的时间、在他的机器上制定攻击。

总之,当你存在 XSS 时:

在网络存储中存储访问令牌,在 XSS 存在期间使用您网站的任何用户的令牌都会受到损害。这意味着攻击者可以获得数以千计的有效访问令牌,并可能造成很多伤害(如果您将刷新令牌存储在 Web 存储中,则危害更大)。用户也容易从自己的浏览器发出未经授权的请求。

将访问令牌存储在 httpOnly cookie 中,任何用户的令牌都不会被泄露。但是,即使存在 XSRF 保护,用户也容易从自己的浏览器发出未经授权的请求。

希望这些信息对您有所帮助。

【讨论】:

以上是关于sessionStorage 与 cookie 中的 JWT 令牌?的主要内容,如果未能解决你的问题,请参考以下文章

sessionStorage 与 cookie 中的 JWT 令牌?

window.sessionStorage、window.localStorage与cookie总结

Cookie LocalStorage 与 SessionStorage详解

区分 Cookie, LocalStorage 与 SessionStorage

Cookie, LocalStorage 与 SessionStorage

JS 详解 Cookie LocalStorage 与 SessionStorage