【问题标题】:CSRF token is invalid after changing Host更改主机后 CSRF 令牌无效
【发布时间】:2017-11-08 10:24:10
【问题描述】:

我们有一个 Symfony2 项目,由于某种原因我们更改了主机,在使用 Plesk Panel 更改为主机后,我们面对的是The CSRF token is invalid. Please try to resubmit the form.,我试图找出原因?然后提供一个简单的 Twig 表单,代码如下:

<!doctype html>
<html>
<head>
    {# ... #}

    <link rel="stylesheet"
          href="{{ asset('assets/vendor/bootstrap/dist/css/bootstrap.min.css') }}">
</head>
<body>

<div class="container">
    <h2>ADD Item to Crawling List</h2>
    {{ form_start(form) }}
    {{ form_widget(form) }}
    {{ form_end(form) }}
</div>
</body>
</html>

而且渲染正确

<!doctype html>
<html>
<head>

    <link rel="stylesheet"
          href="/assets/vendor/bootstrap/dist/css/bootstrap.min.css">
</head>
<body>

<div class="container">
    <h2>ADD Item to Crawling List</h2>
    <form name="form" method="post">
    <div id="form"><div><label for="form_post_id" class="required">Instagram Post Id</label><input type="text" id="form_post_id" name="form[post_id]" required="required" /></div><div><button type="submit" id="form_save" name="form[save]">Fetch Comments</button></div><input type="hidden" id="form__token" name="form[_token]" value="j9YWKseFdkU4Z_Yc5nuwm72SKD4dT06gJpARLqPID6I" /><button type="submit" id="form_save" name="form[save]">Fetch Comments</button></div>    
    </form>
</div>
</body>
</html>

也尝试添加{{ form_rest(form) }},但没有任何成就,结果是一样的。

另一个注意事项是我们没有覆盖 config.yml` 中的会话配置处理程序,它是

framework:
    #esi:             ~
    #translator:      { fallbacks: ["%locale%"] }
    secret:          "%secret%"
    router:
        resource: "%kernel.root_dir%/config/routing.yml"
        strict_requirements: ~
    form:            ~
    csrf_protection: ~
    validation:      { enable_annotations: true }
    #serializer:      { enable_annotations: true }
    templating:
        engines: ['twig']
    default_locale:  "%locale%"
    trusted_hosts:   ~
    trusted_proxies: ~
    session:
        # handler_id set to null will use default session handler from php.ini
        handler_id:  ~

任何有助于我们解决此问题的解决方案或想法将不胜感激。

【问题讨论】:

  • 尝试将隐藏的input 添加到您的form 并将CSRF_token 放在该输入字段中。
  • @Deathstorm 令牌存在,请仔细查看,
  • 一开始没看到token,抱歉
  • 既然你用的是method="post",那么提交按钮在哪里呢?
  • @Deathstorm 它在那里,可能是因为我在这里添加了四个空间,它在stackoverflow渲染系统中被隐藏了。

标签: php symfony session csrf


【解决方案1】:

你应该添加:

{{ form_rest(form) }} 

就在 form_end 之前,这会将 CSRF 令牌添加到表单的隐藏输入中。

【讨论】:

  • 哦,是的,没看到,抱歉!我没有其他想法:/
  • 它与 Symfony 无关,在 VPS 上进行了一些更改之后。
猜你喜欢
  • 1970-01-01
  • 2020-01-02
  • 1970-01-01
  • 2017-07-15
  • 2018-05-12
  • 2015-10-25
  • 2019-09-05
  • 2020-05-19
  • 2022-08-16
相关资源
最近更新 更多