在玩Spring security
时,我想知道应用程序注销时CSRF
(跨站请求伪造)令牌生命周期的方法。
假设用户登录并在我的网站上导航。然后他退出了。我是否应该使CSRF令牌无效(在我的情况下作为cookie实现,如果重要的话)?
如果不是,在安全方面我是否应该注意哪些警告?
如果是,我该如何管理用户对该应用程序的任何进一步操作?如果没有任何CSRF
令牌,服务器端将禁止某些操作。我应该生成新的令牌吗?
我正在使用Spring boot
作为服务器端,它似乎默认为令牌无效(或者我做错了导致此结果......)
感谢您的帮助。
答案 0 :(得分: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保护,那么您也可以正确地执行此操作并刷新令牌upton登录和注销。
答案 1 :(得分:0)
登录
为了防止伪造登录请求,还应该保护登录表单免受CSRF攻击。由于CsrfToken存储在HttpSession中,这意味着将立即创建HttpSession。虽然这在RESTful /无状态架构中听起来很糟糕,但实际情况是状态是实现实际安全性所必需的。没有状态,如果令牌被泄露,我们无能为力。实际上,CSRF令牌的规模非常小,对我们的架构的影响可以忽略不计。
退出
添加CSRF会将LogoutFilter更新为仅使用HTTP POST。这可确保注销需要CSRF令牌,并且恶意用户无法强行注销您的用户。
一种方法是使用表单进行注销。如果你真的想要一个链接,你可以使用JavaScript让链接执行POST(即可能在隐藏的表单上)。对于禁用了JavaScript的浏览器,您可以选择让链接将用户带到将执行POST的注销确认页面。
有关详细信息,请参阅此链接:Csrf protection 你可以看看csrf timeout