首先,我对Symfony 2是个十足的傻瓜。这个问题听起来很简单,如果我试着把一些背景放在为什么和如何需要这个问题上,它会开始变得混乱。
本质上,我创建了一个表单,我使用条令等手动处理、验证和插入表单。我在控制器操作中手动创建表单(它是根据从另一个对象检索的值动态构建的)。我想也许有更好的方法可以做到这一点,但由于我对Symfony还不熟悉,而且我已经用了好几天的时间拖网了,所以我找不到任何解决方案来解决我需要做的事情。
因此,我不是简单地针对类/实体等构建表单,所以我需要手动添加CSRF令牌或某种保护。
在正常情况下,您将创建FormType并配置默认选项以具有csrf_保护。然后是一个简单的例子:
{{ form_widget(form._token) }}
csrf令牌就在那里。
在动态构建表单时,我不确定如何为表单手动创建csrf令牌。有没有人有过在没有类的情况下创建表单并添加csrf保护的经验?
你好,保罗·庞德
在(我的)正常情况下,您创建了一个表单,并且没有专门配置CSRF-它会自动发生,您可以使用表单_rest(form)
或表单_end(form)
来呈现带有CSRF令牌的隐藏输入。我不认为这与没有模型支持的表单有任何不同。
表单类型和令牌之间的连接:
{{ csrf_token("task_item_intention") }}
以及在表格类型中:
class TaskType extends AbstractType
{
// ...
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Acme\TaskBundle\Entity\Task',
'csrf_protection' => true,
'csrf_field_name' => '_token',
// a unique key to help generate the secret token
'intention' => 'task_item_intention',
));
}
// ...
}
我认为您需要的是:
这将呈现一个CSRF令牌。如果您想在不创建表单的情况下保护CSRF,请使用此函数
{{ csrf_token("intention") }}
例如:
<a href="{{ path('remove_stuff', {token: csrf_token('intention')}) }}">Remove</a>
来源
要从控制器验证此令牌,可以执行以下操作:
if ($this->get('token') !== $this->get('security.csrf.token_manager')->getToken('intention')->getValue()) {
throw new \Symfony\Component\Security\Core\Exception\InvalidCsrfTokenException('Invalid CSRF token');
}
要简化,请检查Symfony 2.6或更新版本上的令牌
if ($this->isCsrfTokenValid('intention', $submittedToken)) {
// ... do something, like deleting an object
}
当我运行测试时,我会得到以下错误(找不到令牌或令牌为空): 我找到了一个暂时的解决方法,但它不是一个好的解决方法…
问题内容: 我在网站上启用了CSRF保护,但是CSRF令牌唯一一次放置在隐藏字段中的时间是何时使用。我正在通过ajax发布数据,并且也需要发送CSRF以防止出现500个错误。 我以为有一种方法可以将CSRF令牌显式地嵌入到页面中,但是我似乎找不到它。 如果页面上没有表单,如何获得CSRF令牌? 问题答案: 您可以通过安全性类获取CSRF令牌名称和值:
我正在尝试使用yml格式将列添加到现有表中。将新列条目添加到.yml文件中,并运行命令生成实体 通过运行该命令,得到一个错误 这是我的yml文件:
我正在使用Symfony2。0和FOSUserBundle,并希望在我的登录表单上禁用csrf令牌。 我已经禁用了csrf保护全球在我的网站在我的config.yml: 这工作得很好,没有csrf字段添加到我的表单中。但是,这不适用于登录表单。仅在此表单上,如果我没有将令牌包含在表单中,则会出现“无效的CSRF令牌”错误: 如何在登录表单上禁用CSRF令牌?
基于文档:http://symfony.com/doc/2.8/form/dynamic_form_modific.html#form-events-submitted-data 我准备了动态生成表单。所有的工作都正常,但只有当我使用form添加新数据(/new)时,当我使用相同的form编辑现有数据时--不工作 “约会”的简单形式。它应该是这样工作的:用户选择客户机,然后第二个“选择”是填充正确
我想在div上添加一个属性,如下所示: 使用jQuery,所以我尝试了以下方法: