我似乎无法让登录表单 CSRF 保护使用 Symfony 2.1 愉快地工作。
在 config.yml 中,csrf_protection 设置为 true。登录表单正在呈现一个名为“form[_token]”的隐藏输入。在 security.yml 中:
csrf_parameter: form[_token]
intention: authenticate
使用此配置,我可以毫无问题地登录。但是没有检查 CSRF 令牌。我通过在提交表单之前删除隐藏的输入字段来确认这一点:
<input type="hidden" id="form__token" name="form[_token]" value="9b2f5d5efabb938ff8d83c2c8318db1377a3ef16">
如果我将 csrf_provider 配置设置添加到 security.yml,我将无法再登录,收到错误“Invalid CSRF token”
csrf_provider: form.csrf_provider
我已经阅读了有关该主题的所有内容,但似乎没有任何内容可以正常工作-除了我在本文中阅读的内容:http: //henrik.bjrnskov.dk/symfony2-cross-site-request-forgery/。这些东西似乎被拉进了 Symfony 之友:https ://github.com/FriendsOfSymfony/FOSUserBundle/pull/469 ,我没有使用它。
该帖子指示您:
在 loginAction 中手动生成令牌:
$csrfToken = $this->container->get('form.csrf_provider')->generateCsrfToken('authentication');
将其发送到视图
并在表单中手动呈现
这很烦人。
问题基本上归结为 - CSRF 保护是否应该在 Symfony 2.1 中仅使用配置设置的登录表单起作用,还是我需要修改我的 loginAction 和模板才能使其正常工作?