Php Symfony2-在CRUD操作中使用删除表单

Php Symfony2-在CRUD操作中使用删除表单,php,symfony,symfony-forms,symfony-2.8,Php,Symfony,Symfony Forms,Symfony 2.8,symfony生成的自动crud操作以及symfony演示应用程序具有以下删除操作的代码结构 /** * Deletes a testing entity. * * @Route("/{id}", name="testing_delete") * @Method("DELETE") */ public function deleteAction(Request $request, testing $testing) {

symfony生成的自动crud操作以及symfony演示应用程序具有以下删除操作的代码结构

    /**
     * Deletes a testing entity.
     *
     * @Route("/{id}", name="testing_delete")
     * @Method("DELETE")
     */
    public function deleteAction(Request $request, testing $testing)
    {
        $form = $this->createDeleteForm($testing);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $em->remove($testing);
            $em->flush();
        }

        return $this->redirectToRoute('testing_index');
    }

    /**
     * Creates a form to delete a testing entity.
     *
     * @param testing $testing The testing entity
     *
     * @return \Symfony\Component\Form\Form The form
     */
    private function createDeleteForm(testing $testing)
    {
        return $this->createFormBuilder()
            ->setAction($this->generateUrl('testing_delete', array('id' => $testing->getId())))
            ->setMethod('DELETE')
            ->getForm()
        ;
    }
我的问题是为什么我们需要一个表单来删除?我们不能只在细枝中设置一个带有
id
参数的链接,我们不能只执行以下操作,为什么我们需要在删除表单之前检查表单中的实体
isValid()

    /**
     * test delete
     * @Route("/{id}", name="testing_delete")
     * @Method("DELETE")
     */
    public function deleteAction(testing $testing) {
        $em = $this->getDoctrine()->getManager();
        $em->remove($testing);
        $em->flush();
        return $this->redirectToRoute('testing_showall');
    }

若您使用id为的链接进行删除,则robot可以通过循环删除您的数据

在Symfony操作中,检查“DELETE”方法以及您的crsf令牌是否使用方法验证有效“$form->isValid()


这就是安全原因,它是“创建表单并验证”(create form and validate)

不使用简单链接删除数据表示HTTP中的概念(如果您只有一个简单链接,则必须向URL发送
GET
请求):

根据惯例,某些方法(例如HEAD、GET、OPTIONS和TRACE)被定义为安全的,这意味着它们仅用于信息检索,不应更改服务器的状态。换句话说,它们不应该有副作用[……]


我认为写一句话是很重要的

通过使用Symfony表单,它创建了一个CSRF令牌,以确保删除实体的用户与想要它的用户相同。 如果没有表单,只有链接
/{id}
,则可能通过在邮件中使用错误链接或XSS攻击,使其他人发送删除实体的请求

如果Bob使用XSS漏洞或其他方法使Alice(管理员)发送删除实体的请求,则该请求由Alice发送,如果是Bob的攻击,则为event。因此,Bob没有此请求的权限,但他使用了Alice的会话,Alice拥有此权限。实体将被删除


为了防止CSRF攻击,使用CSRF令牌非常重要。Symfony的表单自动包含它,并检查in
isValid()

啊,是的,很好,网上有没有关于这个的文档?我不知道这些文档,我已经根据我的知识给出了答案。如果我能找到文件与你分享。。感谢这个链接从Symfony的医生那里谈到了csrf保护