当前位置: 首页 > 知识库问答 >
问题:

Symfony使用get方法禁用类表单的csrf保护

郜俊健
2023-03-14

我有无类表单,使用GET方法,无法禁用csrf保护。我想使用GET方法,因为用户必须有选项来提供指向他/她的搜索的链接。当用户提交表单时,URL中会出现\u标记。如果其他用户尝试使用它,您知道,“CSRF令牌无效。请尝试重新提交表单。”出现。

这是控制器中的功能:

 /**
 * @Route("/tips/all", name="all_tips")
 */
public function listAction(Request $request)
{
    $period = 0;
    $sport = array('3', '4', '15', '19', '20', '29', '33');
    $defaultData = array(
        'csrf_protection' => false,
        'period' => 0,
        'sport' => $sport,
    );
    $form = $this->createFormBuilder($defaultData)
        ->add('period', 'choice',
            array('choices' => array(
                '0' => "All time",
                '1' => "Last month",
                '2' => "Last 3 months",
                '3' => "Last year",
            ),
                'expanded' => false,
                'multiple' => false,
            )
        )
        ->add('sport', 'choice',
            array('choices' => array(
                '3' => 'Baseball',
                '4' => 'Basketball',
                '15' => 'Football',
                '19' => 'Hockey',
                '29' => 'Soccer',
                '33' => 'Tennis',
            ),
                'expanded' => true,
                'multiple' => true,
                'data' => $sport,
            ))
        ->add('send', 'submit')
        ->setMethod('GET')
        ->getForm();

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $data = $form->getData();
        $period = $data['period'];
        $sport = $data['sport'];
    }

    $em = $this->getDoctrine()->getManager();
    $addSport = !empty($sport) ? '  p.sport in (' . implode(',', $sport) . ')' : '';
    $dql = "
        SELECT
            p
        FROM
            AppBundle:Predictions p
        WHERE " .
        $addSport .
        $this->fromTo($period, 'dql');
    $query = $em->createQuery($dql);
    $paginator = $this->get('knp_paginator');
    $pagination = $paginator->paginate(
        $query, $request->query->getInt('page', 1), 50, array(
            'defaultSortFieldName' => 'p.predictDate',
            'defaultSortDirection' => 'DESC',
        )
    );
    return $this->render('AppBundle:Tips:all.html.twig', array(
        'pagination' => $pagination,
        'form' => $form->createView(),
    ));
}

这是twig中的代码

{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}

我的Symfony版本是v2。8.45.

我试图通过csrf_protection=

我做错了什么?

编辑:嗯,我刚刚看到了注射SQL可能性。:-(我会解决的。

共有1个答案

钱振
2023-03-14

问题是您在数据阵列中添加了csrf_保护选项,而不是选项阵列。createFormBuilder方法的声明为:

protected function createFormBuilder($data = null, array $options = array())

因此,您必须按如下方式更改代码:

$defaultData = array(
    'period' => 0,
    'sport' => $sport,
);

$options = array('csrf_protection' => false);

$form = $this->createFormBuilder($defaultData, $options)
        ...
 类似资料:
  • 问题内容: 我正在构建一个通过webservices与symfony2应用程序对话的移动应用程序,我找不到在特定控制器/操作上禁用csrf保护的方法 我想将注册数据发布到此操作并使用sf2表单验证。我没有在移动应用程序中致电该表格 无法在操作中更改容器参数,因为它是冻结参数而引发异常… 我不想禁用整个应用程序的表单保护 有什么线索吗? 谢谢 ! 更新:使用symfony 2.1.x 问题答案: 如

  • 首先,我对Symfony 2是个十足的傻瓜。这个问题听起来很简单,如果我试着把一些背景放在为什么和如何需要这个问题上,它会开始变得混乱。 本质上,我创建了一个表单,我使用条令等手动处理、验证和插入表单。我在控制器操作中手动创建表单(它是根据从另一个对象检索的值动态构建的)。我想也许有更好的方法可以做到这一点,但由于我对Symfony还不熟悉,而且我已经用了好几天的时间拖网了,所以我找不到任何解决方

  • 我的Spring Boot REST API受KeyClope实例的保护。由于CSRF保护只允许GET和POST,我想禁用它。然而,我的方法似乎不起作用,因为REST API将为任何来源不同于的请求返回HTTP状态403http://localhost:8080.以下是我如何配置我的安全性: 带有http://localhost:8080起源的请求将起作用: 编辑: 这就是我的CustomCors

  • 我正试图用crsf令牌保护我的Zend表单。如果我在表单中添加token元素,它总是会向我返回notEmpty错误消息。我做错什么了吗?谢谢 控制器中的操作: 在我看来,我呈现表单并转储错误消息 每次验证表单后,我都会收到如下错误消息: 如果我给元素填充了正确的值,最后一个错误总是token-NotEmpty,因此我的表单永远无效。

  • 我正在使用Symfony2。0和FOSUserBundle,并希望在我的登录表单上禁用csrf令牌。 我已经禁用了csrf保护全球在我的网站在我的config.yml: 这工作得很好,没有csrf字段添加到我的表单中。但是,这不适用于登录表单。仅在此表单上,如果我没有将令牌包含在表单中,则会出现“无效的CSRF令牌”错误: 如何在登录表单上禁用CSRF令牌?

  • 有没有办法只使用spring security实现CSRF保护,而不使用身份验证和授权等其他功能? 我尝试了以下配置,但它关闭了spring security的所有功能。想知道是否有一种方法可以配置csrf功能。