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

时间:2013-08-09 13:23:48

标签: forms csrf symfony-2.3

我目前在我的页面上有表单,无论用户是否登录,都会出现这些表单。用户登录后,会向其显示其中一种表单(使用CSRF)。

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

  

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

  

我目前的解决方案是使用身份验证和设置表单令牌输入值传回新的CSRF令牌。

就这样做。这没什么不对。

答案 1 :(得分:0)

感谢@MarkFox指导我this CWE - 虽然我知道这是通过设计,但我希望有一种方法让我避免沿着我走的路走下去。

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

  

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

出于这个原因,我建议你沿着我最终的路径走下去,发送新的request tokens via AJAX并将它们放入相关的表格中。