【问题标题】:CSRF Token lifecycle after Logout注销后的 CSRF 令牌生命周期
【发布时间】:2016-02-03 19:47:11
【问题描述】:

在玩Spring security 时,我想知道CSRF(跨站点请求伪造)令牌生命周期在应用程序注销时的方法。

假设用户登录并在我的网站上导航。然后他退出。我是否应该使 CSRF 令牌无效(在我的情况下作为 cookie 实现,如果重要的话)?

如果没有,在安全方面我应该注意什么?

如果是,我应该如何管理用户在应用程序上的任何进一步操作?没有任何CSRF Token,服务器端会禁止一些动作。那我应该生成一个新的Token吗?

我在服务器端使用Spring boot,默认情况下它似乎使令牌无效(或者我做错了什么导致这个结果......)

感谢您的帮助。

【问题讨论】:

  • 你的意思是你有一个根据“双重提交Cookie”模式的自定义实现?
  • 我不知道这种模式,所以不知道。但我会在 OWASP 备忘单中阅读它以了解我的文化

标签: spring-security spring-boot token csrf


【解决方案1】:

我假设你说的是Double Submit Cookies CSRF prevention method

如果不是,那么这不是一个安全的解决方案 - 有关保护 CSRF 的一些方法,请参阅Why is it common to put CSRF prevention tokens in cookies?

是的,您应该在注销和登录时刷新 CSRF 令牌。请注意,并非每个站点都需要防止登录 CSRF。 See this answer 如果您需要这样做。

登录时不刷新 CSRF 令牌的(非常低的)风险是,如果另一个用户使用同一个浏览器登录,则原始用户知道 CSRF 令牌,如果他们诱使新用户跟踪恶意链接。当然,如果第一个用户可以控制浏览器或操作系统,他们可以简单地在机器本身上安装一些东西来做到这一点。但是,如果第二个用户在使用前彻底检查了机器,那么这种类型的 CSRF 攻击将无法检测到(尽管如果用户非常警惕,那么他们在登录时不会去点击任何收到的链接)。

简而言之,如果您正在实施 CSRF 保护,那么您最好正确执行此操作并在登录和注销时刷新令牌。

【讨论】:

  • 这回答了我的问题。我现在将在注销后实现 CSRF 重新生成。感谢您的提示。
【解决方案2】:

登录

为了防止伪造登录请求,登录表单也应该被保护免受 CSRF 攻击。由于 CsrfToken 存储在 HttpSession 中,这意味着将立即创建一个 HttpSession。虽然这在 RESTful / 无状态架构中听起来很糟糕,但现实是状态对于实现实际安全性是必要的。如果没有状态,如果令牌被泄露,我们将无能为力。实际上,CSRF 令牌的大小非常小,对我们的架构的影响应该可以忽略不计。

退出

添加 CSRF 将更新 LogoutFilter 以仅使用 HTTP POST。这可确保注销需要 CSRF 令牌,并且恶意用户无法强制注销您的用户。

一种方法是使用表单注销。如果你真的想要一个链接,你可以使用 JavaScript 让链接执行 POST(即可能在隐藏表单上)。对于禁用了 JavaScript 的浏览器,您可以选择让该链接将用户带到将执行 POST 的注销确认页面。

查看此链接了解更多信息:Csrf protection 你也可以看csrf timeout

【讨论】:

  • 谢谢@Amit。我从 Spring 安全文档中看到了这个摘录。但这并不能真正回答我的问题:注销后令牌会发生什么?我想服务器应该生成一个新的(这是合乎逻辑的,因为会话已被清除)。我只是想确保这是正确的方法,并且没有我没有看到的警告。
猜你喜欢
  • 2015-01-08
  • 2011-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-17
  • 2023-02-20
  • 2021-11-25
  • 2017-07-25
相关资源
最近更新 更多