Symfony2的 - 在CRUD操作使用delete形式

问题描述 投票:5回答:3

通过symfony中产生的渣滓adutomatic操作,还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参数的链接,不能只是我们下面的,为什么我们需要检查,如果表单里面的实体delete一个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');
    }
php symfony symfony-forms symfony-2.8
3个回答
9
投票

如果您使用的链接,与ID删除,这是可能的机器人可以删除你的数据循环。

在Symfony的行动检查“删除”的方法,以及如果你的CSRF令牌方法IsValid验证“$形式 - > isValid()的”

这是安全原因,它的创建形式和验证


5
投票

不使用简单的链接删除数据表示要safe methods的HTTP概念(如果你有只是一个简单的链接,你就必须发送一个GET请求URL):

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


0
投票

我觉得写一个关于CSRF字是很重要的。

通过使用Symfony的形式,它会创建一个CSRF令牌,以确保谁删除该实体的用户是谁想要它相同的用户。如果没有形式,只有一个链接/{id},它会使用错误的链接在邮件或XSS攻击,使别人发送给删除实体的要求是不可能的。

如果Bob使用一个XSS漏洞或别的东西,使爱丽丝(管理员)发送删除一个实体的请求,该请求被Alice发送,如果事件是由鲍勃攻击。所以,鲍勃还没有这个要求的权利,但他用爱丽丝,谁拥有权利的会议。该实体将被删除。

为了防止CSRF攻击,使用CSRF令牌是非常重要的。 Symfony的的形式自动将它包括,在isValid()检查。

© www.soinside.com 2019 - 2024. All rights reserved.