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