我有一个删除链接,可以按ID /comment/:id/delete
为了保护此链接,我在链接中添加了一个csrf标记
$CSRFTokenForm = new BaseForm();
$link = url_for(..., array('_csrf_token' => $CSRFTokenForm->getCSRFToken()));
在executeDelete中我使用checkCSRFProtection()
方法,一切正常。
唯一的一点是,每个评论都是由部分显示的,每个部分创建它自己的BaseForm()
以创建令牌,这是浪费时间,因为它们都是相同的。
您是否更了解如何提高效率,例如静态getCSRFToken()
方法或创建全局BaseForm()
?
答案 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实例。