12

我目前在我的页面上有表单,无论用户是否登录,这些表单都在那里。一旦用户登录,他们就会看到这些表单之一(使用 CSRF)。

问题是,如果在身份验证后显示此框,则 CSRF 令牌无效。我已经通过允许自己提交表单而不进行身份验证检查并$form->isValid()返回来确认这一点,true而在登录后,它给了我false以下错误:

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

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

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

4

2 回答 2

0

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

但是,如果您真的不想这样做,您说:

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

就这样做吧。没有什么不妥。

于 2013-09-17T12:54:55.327 回答
0

感谢@MarkFox 将我指向这个 CWE - 虽然我知道这是通过设计,但我希望有一种方法可以让我避免走上我最终选择的路线。

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

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

出于这个原因,我建议您沿着我最终的路径走,通过 AJAX 发送新的请求令牌并将它们放入相关的表单中。

于 2013-10-25T09:28:08.137 回答