Symfony: безопасное удаление ссылки с CSRFProtection - PullRequest
6 голосов
/ 08 июня 2011

У меня есть ссылка для удаления объекта Comment с идентификатором /comment/:id/delete

. Чтобы защитить эту ссылку, я добавляю токен csrf к ссылке

$CSRFTokenForm = new BaseForm();
$link = url_for(..., array('_csrf_token' => $CSRFTokenForm->getCSRFToken()));

и вexecuteDelete Я использую метод checkCSRFProtection(), и все работает нормально.

Единственное, что каждый комментарий отображается частичным, и каждый частичный создает свой собственный BaseForm() для создания токена,что является пустой тратой времени, поскольку они все одинаковы ..

У вас есть идея, как сделать его более эффективным, например, статический метод getCSRFToken() или создание глобального BaseForm()?

Ответы [ 3 ]

5 голосов
/ 08 июня 2011

Использовать метод SF => delete. Создает для вас токен CSRF:

<?php 
    echo link_to('comment/' . $comment->getId() . '/delete', 
             array(
                 'method'  => 'delete', 
                 'confirm' => 'Do you really want to delete the comment??', 
                 'title'   => 'Delete'
             )
         ); 
?>
1 голос
/ 25 июля 2011

Да, это ошибка плагина jQuery. Если вы используете sfJqueryReloadedPlugin - 1.4.3, вам нужно изменить исходный код файла jQueryHelper в каталоге плагина и поместить «BaseForm» вместо «sfForm» в «csrf => 1» sectuo

0 голосов
/ 08 июня 2011

С плагином jQuery попробуйте:

jq_link_to_remote('comment/' . $comment->getId() . '/delete', array('csrf' => 1))

Нашел его в исходном коде , и они делают это также с экземпляром BaseForm.

...