Symfony2 — использование формы Delete в операции CRUD

Операция Adutomatic Crud, сгенерированная Symfony, а также демонстрационное приложение 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');
}

5

Решение

Если вы использовали ссылку для удаления с идентификатором, возможно, робот сможет удалить ваши данные с помощью цикла.

В действии Symfony проверьте метод «DELETE», а также проверьте, проверяет ли ваш токен crsf метод isValid «$ form-> isValid ()»

Это причина безопасности, это создать форму и проверить

9

Другие решения

Отсутствие простой ссылки для удаления данных означает концепцию безопасные методы в HTTP (если бы у вас была простая ссылка, вы должны были бы отправить GET запрос к URL):

Некоторые из методов (например, HEAD, GET, OPTIONS и TRACE) по соглашению определены как безопасные, что означает, что они предназначены только для поиска информации и не должны изменять состояние сервера. Другими словами, они не должны иметь побочных эффектов […]

5

Я думаю, что важно написать слово о CSRF.

Используя форму Symfony, он создает маркер CSRF, который гарантирует, что пользователь, удаляющий объект, будет тем же пользователем, который его хотел.
Если бы не было формы и только ссылка /{id}можно было бы использовать плохую ссылку в почте или атаку XSS, чтобы кто-то еще отправил запрос на удаление сущности.

Если Боб использует нарушение XSS или что-то еще, чтобы Алиса (администратор) отправила запрос на удаление сущности, запрос отправляется Алисой, если это атака Боба. Итак, у Боба нет прав на этот запрос, но он использовал сеанс Алисы, у которой есть права. Сущность удалена.

Для защиты от CSRF-атак очень важно использовать токен CSRF. Форма Symfony включает его автоматически, и проверьте, если в isValid(),

0
По вопросам рекламы [email protected]