Symfony:使用CSRFProtection安全删除链接

时间:2011-06-08 08:27:19

标签: php symfony1 csrf

我有一个删除链接,可以按ID /comment/:id/delete

删除评论对象

为了保护此链接,我在链接中添加了一个csrf标记

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

在executeDelete中我使用checkCSRFProtection()方法,一切正常。

唯一的一点是,每个评论都是由部分显示的,每个部分创建它自己的BaseForm()以创建令牌,这是浪费时间,因为它们都是相同的。

您是否更了解如何提高效率,例如静态getCSRFToken()方法或创建全局BaseForm()

3 个答案:

答案 0 :(得分:5)

使用SF的方法=>删除。它为您创建CSRF令牌:

<?php 
    echo link_to('comment/' . $comment->getId() . '/delete', 
             array(
                 'method'  => 'delete', 
                 'confirm' => 'Do you really want to delete the comment??', 
                 'title'   => 'Delete'
             )
         ); 
?>

答案 1 :(得分:1)

是的,这是一个jQuery插件错误。如果您正在使用sfJqueryReloadedPlugin - 1.4.3,则需要在插件目录中更改文件jQueryHelper的源代码,并在“csrf =&gt; 1”sectuo中添加“BaseForm”而不是“sfForm”

答案 2 :(得分:0)

使用jQuery插件尝试:

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

sourcecode中找到它,并且他们也使用BaseForm实例。