【问题标题】:“The CSRF token is invalid. Please try to resubmit the form” in Symfony3“CSRF 令牌无效。请尝试重新提交表单”在 Symfony3 中
【发布时间】:2019-08-13 23:54:32
【问题描述】:

我有一个 Symfony 3 应用程序,它是通过 Kubernetes 部署的。有一个页面有 2 个表单和 2 个带有服务器端处理的数据表。我正在使用 Redis 进行会话存储。提交任一表单时,我随机收到错误“CSRF 令牌无效。请尝试重新提交表单”。如果我只有 2 个(2 个表格,0 个表格,1 个表格,1 个表格;0 个表格,2 个表格)的任何组合,我不会收到错误消息。每次提交表单时都会发送令牌。

有人可以就可能的原因提供一些提示吗? 我已经尝试过 Stackoverflow 上类似问题的解决方案,但无济于事。

编辑:

我刚刚注意到,当 CSRF 错误发生时,我在 cookie 中看不到 sf_redirect。所有成功的调用都有这个 cookie。

更新:

我找到了解决方案。我更新了我的防火墙配置。

firewalls:
    main:
        stateless: true

之前是stateless: false

【问题讨论】:

    标签: php forms symfony kubernetes csrf


    【解决方案1】:

    确保在您的 html 表单中包含一个新的 csrf_token

    <input type="hidden" name="token" value="{{ csrf_token('[insert intended action here]') }}"/>
    

    【讨论】:

    • 我正在通过 form_start() 呈现表单; form_widget(); form_end();我还添加了公共函数 configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'csrf_field_name' => '_token', 'intention' => 'form_intention', ]); } 到表格中。
    • token的名字应该是name="_csrf_token" ?
    【解决方案2】:

    要确保 CSRF 在您的表单上,您可以添加 {{ form_rest(form) }} 但如果您处于开发模式,可能是因为您不在 https 中?

    【讨论】:

    • 令牌始终发送,但无效
    猜你喜欢
    • 2017-08-01
    • 2014-06-20
    • 2020-07-27
    • 2018-01-15
    • 1970-01-01
    • 2014-05-09
    • 2012-12-15
    • 2020-07-18
    • 2019-07-28
    相关资源
    最近更新 更多