有很多来自 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 传输到某个地方。
但这让我感到困惑。我了解攻击媒介,但如果您有一个受损的第 3 方 javascript 依赖项,那么您是不是真的被搞砸了,因为它可以监听/捕获用户在与您的应用程序交互时所做的任何事情?
最佳答案
我是 https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage 的作者
当页面上存在 XSS 时,攻击者有权:
- HTML5 网络存储(本地和 session )
- 未设置 httpOnly 标志的 Cookie
- 控制选项卡直到关闭,并能够发出未经授权的请求
您还可以开始制定攻击来绕过 XSRF 保护。
当存在 XSRF 漏洞时,攻击者有权:
- 从第三方域发出未经授权的请求,前提是您可以将用户引诱到那里(或在存在 XSS 的情况下将他们发送到那里)。
您可以看到,当存在 XSS 漏洞时,您可以发出未经授权的请求,攻击者需要跳过更多的环节才能利用 XSRF。这意味着当 XSS 存在时(无论是否有 XSRF 保护),都会存在进行未授权请求的攻击向量。
希望这能为我的下一个观点扫清障碍。
与窃取代表用户身份和 session 的无状态 token 相比,XSRF 攻击或未经授权的请求的影响和范围更小。泄露 token 意味着攻击者可以完全控制代表用户在他的时间在他的机器上发起攻击。
总而言之,当您出现 XSS 时:
在网络存储中存储访问 token ,在 XSS 存在期间使用您网站的任何用户的 token 都会受到损害。这意味着攻击者可以获得数以千计的有效访问 token ,并且可能造成很多伤害(如果您将刷新 token 存储在 Web 存储中,甚至会造成更多伤害)。用户也容易从他们自己的浏览器发出未经授权的请求。
将访问 token 存储在 httpOnly cookie 中,任何用户的 token 都不会受到损害。但是,即使存在 XSRF 保护,用户也容易从他们自己的浏览器发出未经授权的请求。
希望这些信息对您有所帮助。
关于javascript - sessionStorage 与 cookie 中的 JWT token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37770967/