Symfony:使用 CSRFProtection 安全删除链接

发布于 2024-11-14 13:18:14 字数 489 浏览 1 评论 0原文

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

为了保护此链接,我向该链接添加了一个 csrf 令牌

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

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

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

您是否对如何提高效率有更好的想法,例如静态 getCSRFToken() 方法或创建全局 BaseForm()

I have a delete link to delete a Comment object by ID /comment/:id/delete

In order to secure this link I add a csrf token to the link

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

and in the executeDelete i use the checkCSRFProtection() method, and it all works fine.

The only thing is that each comment is displayed by a partial, and each partial creates it's own BaseForm() in order to create the token, which is waste of time since they're all the same..

Do you have a better idea on how to make it more efficient, like maybe a static getCSRFToken() method or creating a global BaseForm()?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

Bonjour°[大白 2024-11-21 13:18:14

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

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

Use SF's method => delete. It creates the CSRF token for you:

<?php 
    echo link_to('comment/' . $comment->getId() . '/delete', 
             array(
                 'method'  => 'delete', 
                 'confirm' => 'Do you really want to delete the comment??', 
                 'title'   => 'Delete'
             )
         ); 
?>
赢得她心 2024-11-21 13:18:14

是的,这是一个 jQuery 插件错误。如果您使用 sfJqueryReloadedPlugin - 1.4.3,您需要更改插件目录中文件 jQueryHelper 的源代码,并将“BaseForm”而不是“sfForm”放在“csrf => 1”部分中

Yes it's a jQuery Plugin error. If you are using sfJqueryReloadedPlugin - 1.4.3 you need to change the source code of the file jQueryHelper in the plugin's directory and put "BaseForm" instead of "sfForm" in the "csrf => 1" sectuo

尹雨沫 2024-11-21 13:18:14

使用 jQuery 插件尝试:

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

在 <一个href="http://trac.symfony-project.org/browser/plugins/sfJqueryReloadedPlugin/1.2/trunk/lib/helper/jQueryHelper.php#L340" rel="nofollow">源代码 他们就这么做了也有一个 BaseForm 实例。

With the jQuery Plugin try:

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

Found it in the sourcecode and they do it with a BaseForm instance, too.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文