Magento CSRF 保护

Posted

技术标签:

【中文标题】Magento CSRF 保护【英文标题】:Magento CSRF protection 【发布时间】:2012-10-08 09:09:41 【问题描述】:

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

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

http://inchoo.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?

【问题讨论】:

【参考方案1】:

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

要在提交表单时随请求发送 CSRF 表单密钥,请将 &lt;?php echo $this-&gt;getBlockhtml('formkey') ?&gt; 代码插入表单正文。

这将生成如下输入:&lt;input type="hidden" value="unique16codehere" name="form_key"&gt;。 要验证密钥,请在相应控制器的操作中使用 _validateFormKey() 方法。

【讨论】:

如何防止暴力破解?【参考方案2】:

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

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

【讨论】:

以上是关于Magento CSRF 保护的主要内容,如果未能解决你的问题,请参考以下文章

Magento开发文档:Magento入门

安装完magento后,其他电脑无法访问magento,URL自动跳转到http://localhost/magento

Magento:为国家/地区 magento 设置默认商店视图

如何创建 Magento-2 扩展包以上传到 Magento-2 官方网站?

Magento 2 Theme Ultimate Guide - 如何创建Magento 2主题终极指南

Magento 2中文手册教程 - Magento 2 安装流程图