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 作为身份验证令牌,则应将其存储为标记为 httpOnly
和 secure
的 cookie,与使用本地/会话存储相反。正如您所提到的,这可以防止 XSS 攻击,我们担心恶意 javascript 被注入我们的页面并窃取我们的会话令牌。
httpOnly
的cookie 无法被JavaScript 读取,因此无法在XSS 攻击中被窃取。
但是,本地/会话存储可以通过 JavaScript 读取,因此将会话令牌放在那里会使其容易受到 XSS 攻击。
但是,将会话令牌 cookie 设置为 httpOnly
和 secure
仍然会使您容易受到 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 令牌?
django-graphql-jwt JWT_COOKIE_SAMESITE 不工作