当前位置: 首页 > 知识库问答 >
问题:

会话存储与cookie中的JWT令牌?

邢运良
2023-03-14

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

  • 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

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

但这让我感到困惑。我理解攻击向量,但如果你有一个受损的第三方javascript依赖关系,你不是真的完蛋了吗,因为它可以监听/捕获你的用户在与你的应用程序交互时所做的任何事情?

共有1个答案

羊舌自强
2023-03-14

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

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

  • HTML5 web存储(本地和会话)
  • 未设置httpOnly标志的Cookie
  • 控制选项卡直到其关闭,并能够发出未经授权的请求

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

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

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

您可以看到,当存在XSS漏洞时,您可以发出未经授权的请求,并且攻击者需要跳过更多障碍才能利用XSRF。这意味着当XSS存在时(无论XSRF保护与否),发出未经授权的请求的攻击媒介将存在。

希望这能为我的下一点澄清问题。

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

总之,当您:

>

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

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

    希望这些信息有所帮助。

  •  类似资料:
    • 问题内容: 我正在一个应用程序中工作,该应用程序需要在用户登录期间保留一些数据,但我有一个问题,localStorage,sessionStorage和cookie有什么区别? 我在问我可以使用什么来将某些数据持久化在DOM中,即使用户刷新页面,有人说:使用sessionStorage或localStorage,然后,有人想到了使用ngCookies的想法,因为它可以在每个浏览器,但是,我应该使用

    • 问题内容: 我几个月前开始使用PHP。为了为我的网站创建一个登录系统,我阅读了有关cookie和会话及其区别(cookie存储在用户的浏览器中以及服务器上的会话中)的信息。当时,我更喜欢cookie(谁不喜欢cookie ?!),只是说:“谁在乎?我在将它存储在服务器中没有任何好处”,所以,我继续使用cookie我的学士毕业项目。但是,在完成了我的应用程序的大部分工作之后,我听说对于存储用户ID的

    • 我使用带有Angular 9的Spring boot和无状态会话实现。应用程序正在成功执行登录和注册功能。字符串引导在每个登录请求上生成令牌(JWT)。登录后,当我尝试运行第二个选项卡的应用程序时,它再次要求我登录。为了克服这个问题,我将令牌保存在LocalStorage,然后在单击另一个选项卡时,angular代码能够从LocalStorage中选择令牌。但是经过一些研发,我知道应该使用HTTP

    • 我正在尝试使用 GraphQL 使用 JWT 对用户进行身份验证。登录用户后,我会收到令牌作为 JSON 响应和存储刷新令牌的 httponly cookie。(服务器端使用的是销售核心) 从Saleor的文档和其他一些博客帖子中,我假设这个响应cookie现在应该存储在浏览器中,每当我需要刷新令牌时,cookie refreshToken将用于验证我的请求。然而,当我在开发工具中将选项卡切换到“

    • 问题内容: 除了是非持久性的并且仅限于当前窗口之外,会话存储与本地存储相比是否还有其他好处(性能,数据访问等)? 问题答案: localStorage和sessionStorage都扩展了Storage。除了的预期的“非持久性”外,它们之间没有区别。 也就是说,存储在中的数据将 一直保留到明确删除为止 。所做的更改将被保存,并且可用于当前和将来对该站点的所有访问。 对于, 更改仅在每个选项卡上可用

    • sessionStorage 会话存储 存储针对QQ帐号隔离 数据存储于内存中,当前游戏结束后被清空 函数 key( index ) 获取对应索引的key 手q 版本7.8.5 参数 参数名 类型 说明 index number 索引值 返回值 类型 说明 string 说明 示例 var stringKey = BK.sessionStorage.key(0); getItem( key )