JWT + cookies + HTTPS + CSRF

时间:2016-02-10 11:02:06

标签: cookies https token csrf jwt

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

  • 如果我将JWT令牌与localStorage一起使用,则可以进行XSS攻击
  • 如果我使用带有cookie的JWT令牌,则可以进行CRSF攻击

...,但如果我通过HTTPS使用带有httpOnly +安全cookie的JWT令牌并且令牌生存期为1个月,那么在这种情况下是否还可以进行CSRF攻击?

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

1 个答案:

答案 0 :(得分:1)

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

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

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

有一些防止CSRF攻击的技术。我建议阅读有关CSRF攻击和预防的this OWASP page