我已经在移动应用程序上使用了 JWT,但我将第一次在网站上实现它以进行身份验证,但我仍然有一点不明白:
...,但是如果我通过 HTTPS 使用 JWT 令牌,并使用 httpOnly+secure cookies 且令牌生命周期为 1 个月,在这种情况下,CSRF 攻击仍然可能吗?
我在网上看到了带有 cookie 的自定义令牌或带有 localStorage 或 JWT 的自定义令牌,但我没有明确得到 httpOnly+secure cookie + JWT + HTTPS + CSRF 需求的答案。
如果您使用 JWT 作为身份验证令牌,则应将其存储为标记为
httpOnly
和 secure
的 cookie,而不是使用本地/会话存储。正如您提到的,这可以防止 XSS 攻击,我们担心恶意 JavaScript 会被注入我们的页面并窃取我们的会话令牌。
httpOnly
的cookie无法被JavaScript读取,因此它无法在XSS攻击中被窃取。但是,使会话令牌 cookie
httpOnly
和 secure
仍然会让您容易受到 CSRF 攻击。要了解原因,请记住 Cookie 标有其起源的域,并且浏览器仅发送与请求发送到的域匹配的 Cookie(与发送请求的页面的域无关) 。例如,假设我在一个选项卡中登录到 stackoverflow.com
,并在另一个选项卡中转到 evil.com
。如果 evil.com
对 stackoverflow.com/delete-my-account
进行 ajax 调用,我的 stackoverflow 身份验证令牌 cookie 将被发送到 stackoverflow 服务器。除非该端点能够防范 CSRF,否则我的帐户将被删除。有一些技术可以防止 CSRF 攻击。我建议阅读此 OWASP 页面
如果我错了,请告诉我怎么做。