JWT + cookie + HTTPS + CSRF

Posted

技术标签:

【中文标题】JWT + cookie + HTTPS + CSRF【英文标题】:JWT + cookies + HTTPS + CSRF 【发布时间】:2016-05-20 16:44:26 【问题描述】:

我已经在移动应用程序上使用过 JWT,但我将首次在网站上实现它以进行身份​​验证,我还有一点我不明白:

如果我在 localStorage 中使用 JWT 令牌,可能会发生 XSS 攻击 如果我将 JWT 令牌与 cookie 一起使用,可能会发生 CRSF 攻击

...,但是如果我通过 HTTPS 使用 JWT 令牌和 httpOnly+secure cookie 并且令牌生命周期为 1 个月,那么在这种情况下 CSRF 攻击仍然可能吗?

我在网上看到了带有 cookie 的自定义令牌或带有 localStorage 或 JWT 的自定义令牌,但我没有明确得到 httpOnly+secure cookie + JWT + HTTPS + 需要 CSRF 的答案。

【问题讨论】:

【参考方案1】:

如果您使用 JWT 作为身份验证令牌,则应将其存储为标记为 httpOnlysecure 的 cookie,与使用本地/会话存储相反。正如您所提到的,这可以防止 XSS 攻击,我们担心恶意 javascript 被注入我们的页面并窃取我们的会话令牌。

标记为httpOnly 的cookie 无法被JavaScript 读取,因此无法在XSS 攻击中被窃取。 但是,本地/会话存储可以通过 JavaScript 读取,因此将会话令牌放在那里会使其容易受到 XSS 攻击。

但是,将会话令牌 cookie 设置为 httpOnlysecure 仍然会使您容易受到 CSRF 攻击。要了解原因,请记住 cookie 标有它们源自的域,并且浏览器仅发送与请求所发送到的域匹配的 cookie 发送(独立于页面的域请求是从)发送的。例如,假设我在一个选项卡中登录***.com,而在另一个选项卡中转到evil.com。如果evil.com***.com/delete-my-account 进行ajax 调用,我的*** 身份验证令牌cookie 将被发送到*** 服务器。除非该端点保护 CSRF,否则我的帐户将被删除。

有一些技术可以防止 CSRF 攻击。我建议阅读this OWASP page 了解 CSRF 攻击和预防。

【讨论】:

您好,非常感谢您的回答。阅读您分享的文章后,我将实施 CSRF 预防。 您好!请看一下这个问题:***.com/questions/49597702/…我目前正在实现一个 RESTful API + SPA,并且一直在想同样的问题。想出了这个办法。也许分享你的观点?

以上是关于JWT + cookie + HTTPS + CSRF的主要内容,如果未能解决你的问题,请参考以下文章

sessionStorage 与 cookie 中的 JWT 令牌?

sessionStorage 与 cookie 中的 JWT 令牌?

如何使用 Cookie 进行存储 jwt 令牌用户认证?

django-graphql-jwt JWT_COOKIE_SAMESITE 不工作

使用 MERN 的 passport-jwt 不显示 cookie

在身份验证期间使用 JWT 令牌反序列化 cookie 无法正确反序列化