【问题标题】:Setting default values for a password field in Magento system configuration在 Magento 系统配置中设置密码字段的默认值
【发布时间】:2012-06-24 08:44:04
【问题描述】:

为系统配置字段设置默认值很容易理解(通过@alanstorm 的Chapagainblog post),但密码字段不同,因为它们在保存到数据库时被加密。因此,当 Magento 从 config.xml 读取默认值时,它会尝试解密该值,如果默认值是明文,则会失败。

是否有 XML 帮助程序或进程(除了使用 $setup->setConfigData('config/path/here', md5('default')) 创建设置脚本)来指定这些默认值?

【问题讨论】:

    标签: xml magento encryption configuration passwords


    【解决方案1】:

    我不是 100% 确定(这是一个快速的grep),但我认为密码加密发生在

    File: app/code/core/Mage/Adminhtml/Model/System/Config/Backend/Encrypted.php 
    protected function _beforeSave()
    {
        $value = (string)$this->getValue();
        // don't change value, if an obscured value came
        if (preg_match('/^\*+$/', $this->getValue())) {
            $value = $this->getOldValue();
        }
        if (!empty($value) && ($encrypted = Mage::helper('core')->encrypt($value))) {
            $this->setValue($encrypted);
        }
    }
    

    请记住,这是一种加密,而不是散列。由于您要存储要在某处使用的密码(通常是支付 API),因此 Magento 需要能够解读已加密的内容。因此,您可以使用核心助手的encrypt 方法生成这些值。你也可以试试这样的

    $o = Mage::getModel('adminhtml/system_config_backend_encrypted');
    $o->setData('value','encrypted or unencrypted value');
    
    $o->beforeSave();     //to encrypt the value
    
    $o->afterLoad();      //to unencrypted the value
    
    $password = $o->getValue();  //fetch the value
    

    请记住,每个商店都有自己的加密密钥,因此这对于分发模块没有用处。

    您还应该查看config.xml 加载和处理中的backend_model 属性(自我链接免责声明,互联网上其他任何地方都没有记录)。

    希望对您有所帮助。

    【讨论】:

    • 直到有一个 _afterLoad 的公共包装器......不幸的是,_beforeSave 不是这样 :)
    【解决方案2】:

    这是一个有趣的问题/思想实验,但目前的行为似乎是合理的。如果一个值的数据存储需要加密,我无法想象一个函数值以纯文本形式出现在文件系统的任何地方,无论是在 config.xml 还是在安装/升级脚本中。

    唯一的另一种选择是自己加密,这可能是不可取的,因为你必须被分发出去,因此要知道密钥值。

    【讨论】:

      猜你喜欢
      • 2015-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-06
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      相关资源
      最近更新 更多