当前位置: 首页 > 知识库问答 >
问题:

在身份验证时停止重新生成/使CSRF无效

凌琦
2023-03-14

目前,我的页面上有表单,无论用户是否登录,表单都存在。用户登录后,会向他们显示其中一个表单(使用CSRF)。

问题是,如果在身份验证之后出现此框,则CSRF令牌将无效。我已经确认了这一点,允许我自己提交表格,而无需验证检查和$form-

CSRF令牌无效。请尝试重新提交表格。

我想有三种解决方案-阻止Symfony在身份验证时重新生成/使CSRF令牌无效,从这些表单中删除CSRF令牌,或者在身份验证后生成我的表单(但是,我宁愿避免这种情况)。我当前的解决方案是将一个新的CSRF令牌和身份验证一起传递回去,并设置forms令牌输入值。

附加:有人知道如何查看当前分配的所有CSRF令牌吗?会议似乎没有举行。


共有2个答案

吕霖
2023-03-14

感谢@MarkFox为我指出了这条CWE——尽管我知道这是通过设计实现的,但我希望有一种方法可以让我避免走我最终走的路。

对于任何感兴趣的人,CWE声明:

在不使任何现有会话标识符失效的情况下,对用户进行身份验证或以其他方式建立新的用户会话,使攻击者有机会窃取经过身份验证的会话。

因此,我建议您沿着我最终走的路,通过AJAX发送新的请求令牌,并将其放入相关表单中。

养翔
2023-03-14

通常的方法是,当有人成功登录时,整个页面都会刷新,因为可能会显示不同的数据,这些数据是用户自定义的。

但是如果你真的不想这么做,你会说:

我当前的解决方案是通过身份验证传递一个新的CSRF令牌,并设置表单令牌输入值。

就这么做吧。这没什么错。

 类似资料:
  • 我正在laravel中创建一个多身份验证系统,其中有两种类型的用户:管理员(由我创建)和用户(使用本地laravel身份验证系统)。 如果我以用户身份登录,当我尝试访问登录页面时,当我已经登录,它会将我重定向回仪表板,但如果我以管理员身份登录,当我再次访问管理员登录页面时,它会让我再次登录,尽管已经作为管理员登录。 以下是我的重定向身份验证类代码: 有人能解释一下发生了什么事吗?

  • 问题内容: 我正在使用Rails做一个单页应用程序。登录和注销时,使用ajax调用Devise控制器。我遇到的问题是当我1)登录2)退出然后再次登录时不起作用。 我认为这与CSRF令牌有关,该令牌在我退出时会重置(尽管它不应该出现),并且由于它是单页的,因此在xhr请求中发送了旧的CSRF令牌,从而重置了会话。 更具体地说,这是工作流程: 登入 登出 登录(成功201。但是在服务器日志中打印) 后

  • 我们正在开发一个iOS应用程序,它使用谷歌来验证firebase。根据https://www . Firebase . com/docs/IOs/guide/user-auth . html # section-log in Firebase说,auth令牌每24小时过期一次。我们想知道以下场景是否是我们需要考虑的: 用户通过Google和Firebase进行身份验证 我们的应用程序将获得一个24

  • 成员身份验证 PDF版下载 OAuth2简介 如流平台提供了OAuth的授权登录方式,可以使如流客户端(移动端或者桌面端内嵌打开)打开的网页获取成员的身份信息,从而免去登录环节。 企业应用中的URL链接(包括自定义菜单或者消息中的链接),均可通过OAuth2.0验证接口来获取成员的身份信息(UserId)。 第一步:构造网页授权链接 获取用户在如流客户端打开应用(或者链接)时的用户身份,如流提供两

  • 我有一个Zend框架2 formElement csrf的问题。 它工作正常,直到我提交一个无效的表单,点击同一页,然后刷新页面。字段上出现"not The相同"验证错误,并出现消息"提交的表单不是来自预期站点"。这是正确的,因为如果我检查csrf字段的值,它与提交前的值不同。 在我决定添加csrf字段之前,表单运行良好。 我正在创建我的csrf字段,如下所示: 并在视图文件中: (FormErr

  • 使用刷新令牌可以缓解CSRF攻击。第一条规定: 刷新令牌由auth服务器作为HttpOnly cookie发送到客户端,并由浏览器在/refresh_token API调用中自动发送。因为客户端Javascript不能读取或窃取HttpOnly cookie,所以这比将其作为普通cookie或在LocalStorage中持久化要好一些。这种方法也可以免受CSRF攻击,因为即使表单提交攻击可以调用/