【问题标题】:How to add CSRF to a custom front-end Magento Form (not using controller)如何将 CSRF 添加到自定义前端 Magento 表单(不使用控制器)
【发布时间】:2016-07-01 09:36:41
【问题描述】:

我想知道如何在自定义 Magento 前端表单上实现 CSRF 保护(在 mage 系统中,位于 app/design/.../templates/page/' 文件夹下作为 .phtml 文件) POST 到另一个自定义 PHP 页面(不在 mage 系统中,位于 Magento 文件夹的根目录)以处理表单发布、发送电子邮件等。

我已经让自定义表单和处理程序正常工作。我只需要为这些表单添加 CSRF 保护,并且需要一些关于如何使用 Magento 内置的 CSRF 密钥来执行此操作的建议。我完全了解如何将键添加到表单 .phtml 页面,但我不确定如何在表单处理程序的 php 页面中使用 _validateFormKey() 函数(因为它不在法师系统中)。

我问这是否可能,因为我不想创建一个带有前端页面的自定义模块来处理任务,因为表单 .phtml 和处理程序页面已经设置并工作(没有 CSRF)。是的,我已经看过这篇文章了:Magento CSRF protection

【问题讨论】:

    标签: forms magento csrf


    【解决方案1】:

    一旦 Magento 应用程序被初始化,您应该能够访问 Magento 请求和会话对象并验证您的 PHP 脚本中的表单键:

    $requestFormKey = Mage::app()->getRequest()->getParam('form_key');
    $sessionFormKey = Mage::getSingleton('core/session')->getFormKey();
    if ($requestFormKey == $sessionFormKey) {
        //go
    }
    

    【讨论】:

    • 那行不通。 requestFormKey 和 sessionFormKey 值不同(无需通过 Firebug 或 MIM 手动更改它们)。相同场景下如何使用_validateFormKey()函数(自定义php处理程序页面,不使用mage或controllers)?
    • 我放弃了尝试使用非模块方法来完成这项工作。无法弄清楚如何让键以这种方式对齐。我决定用 magento 模块方法重建它,并使用 zlik 的建议工作正常。在 'controllers/IndexController.php' 操作中使用它来保护自定义前端表单上的 CSRF。谢谢zlik!我还建议查看 zlik 的“前 5 个 magento 安全编码最佳实践”幻灯片 [link]slideshare.net/magentodev/….
    猜你喜欢
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    相关资源
    最近更新 更多