8

我正在查看 Magento 中的自定义表单。我看过这些教程

http://fastdivision.com/2012/03/29/diy-magento-create-ajax-login-registration-forms-for-your-magento-theme/

http://inhoo.net/ecommerce/magento/magento-email/magento-custom-email-contact-form-with-notification-system/

我没有看到任何关于 CSRF 预防的提及,例如使用存储在用户会话中的客户端令牌检查客户端令牌。我还查看了 Magento 联系我们的表格,看到了这个,但我认为它与 CSRF 无关:

<input type="text" name="hideit" id="hideit" value="" style="display:none !important;">

Magento 是否有任何防止 CSRF 的默认代码?Mage_Core_Controller_Front_Action 的 $this->getRequest()->getParams() 方法是否会自动执行任何操作来防止我可能丢失的 CSRF?

4

2 回答 2

9

Magento 中实际上有一个前端CSRF 令牌验证方法,您可以使用它来向您的自定义表单添加一个唯一的基于会话的表单密钥,并在控制器的操作中对其进行验证。

要在提交表单时发送带有请求的 CSRF 表单密钥,请将<?php echo $this->getBlockHtml('formkey') ?>代码插入到表单的正文中。

这将生成这样的输入:<input type="hidden" value="unique16codehere" name="form_key">. 要验证密钥,请使用_validateFormKey()相应控制器操作中的方法。

于 2014-11-22T16:45:08.950 回答
5

最终程序员用户可以使用他们自己的 CSFR/nonce 保护方案,除非他们在后端管理控制台中创建页面/表单。默认情况下,Magento 管理控制台应用程序对其所有页面/url 都有这种保护。

_validateSecretKeyapp/code/core/Mage/Adminhtml/Controller/Action.php和中的getSecretKey方法app/code/core/Mage/Adminhtml/Model/Url.php。这可以很容易地扩展到您自己的前端表单。

于 2012-10-18T02:18:10.553 回答