【问题标题】:Magento CSRF protectionMagento CSRF 保护
【发布时间】: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?

【问题讨论】:

    标签: php security magento csrf owasp


    【解决方案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 方法。这可以很容易地扩展到您自己的前端表单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-18
      • 2018-05-27
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      • 2019-02-03
      • 2016-01-12
      相关资源
      最近更新 更多