Magento CSRF保护

8

我正在研究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攻击的操作,我可能忽略了什么?

2个回答

9

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

要在提交表单时发送CSRF表单密钥,请将<?php echo $this->getBlockHtml('formkey') ?>代码插入表单主体中。

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


这如何防止暴力攻击? - R T

5

除非程序员在后台管理控制台中创建页面/表单,否则最终的程序员用户需要使用自己的CSFR / nonce保护方案。Magento管理控制台应用程序默认为其所有页面/网址提供此保护。

请查看 app/code/core/Mage/Adminhtml/Controller/Action.php 中的_validateSecretKeyapp/code/core/Mage/Adminhtml/Model/Url.php中的getSecretKey方法。这可以轻松扩展到前端的自己的表单上。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接