调试(7):安全问题:block_name尚未列入白名单。(Magento的system.log)


22

system.log我的Magento安装文件中,我收到以下错误消息

调试(7):安全问题:block_name尚未列入白名单。

这里block_name是我的商店使用的块的名称。

这是什么意思,我该如何解决?

Answers:


28

此消息表示您的Magento商店中使用的区块之一不在白名单中。

通过安全补丁SUPEE-6788Magento CE 1.9.2.2,引入了新的块白名单。Magento现在包括允许的块或指令的白名单。如果一个模块或扩展使用变量,如{{config path=”web/unsecure/base_url”}}{{block type=rss/order_new}}CMS中的网页或电子邮件,而指令是不在此列表中,您需要将它们与你的数据库添加。如果某个块不在白名单中,则不会呈现该块。

错误

SUPEE-7405安全补丁Magento CE 1.9.2.3开始,有一项新的核心功能,可以轻松为您识别白名单中缺少的块。中的blockDirective($construction)功能

app/code/core/Mage/Core/Model/Email/Template/Filter.php

已更新,现在看起来像这样:

/**
 * Retrieve Block html directive
 *
 * @param array $construction
 * @return string
 */
public function blockDirective($construction)
{
    $skipParams = array('type', 'id', 'output');
    $blockParameters = $this->_getIncludeParameters($construction[2]);
    $layout = Mage::app()->getLayout();
    $block = null;

    if (isset($blockParameters['type'])) {
        if ($this->_permissionBlock->isTypeAllowed($blockParameters['type'])) {
            $type = $blockParameters['type'];
            $block = $layout->createBlock($type, null, $blockParameters);
        } else {
            Mage::log('Security problem: ' . $blockParameters['type'] . ' has not been whitelisted.');
        }
    } elseif (isset($blockParameters['id'])) {
        $block = $layout->createBlock('cms/block');
        if ($block) {
            $block->setBlockId($blockParameters['id']);
        }
    }

    if ($block) {
        $block->setBlockParams($blockParameters);
        foreach ($blockParameters as $k => $v) {
            if (in_array($k, $skipParams)) {
                continue;
            }
            $block->setDataUsingMethod($k, $v);
        }
    } else {
        return '';
    }

    if (isset($blockParameters['output'])) {
        $method = $blockParameters['output'];
    }
    if (!isset($method) || !is_string($method) || !method_exists($block, $method)) {
        $method = 'toHtml';
    }
    return $block->$method();
}

注意新

Mage::log('Security problem: ' . $blockParameters['type'] . ' has not been whitelisted.');

如果白名单中缺少某个块,则系统将对其进行检测,并在system.log位于以下位置的文件中打印一个错误,其中包括缺少的块名称

[your magento install dir]/var/log/

当然,您必须启用日志记录才能获取此消息。这是您会看到的错误

调试(7):安全问题:block_name尚未列入白名单。

怎么修

要解决此问题,您将必须手动将丢失的块名称添加到白名单。只添加您信任的块。如果您不知道该块从何而来,请首先找出该块。确定要添加丢失的块后,请在Magento管理面板中转到

System > Permissions > Blocks

然后单击Add New Block按钮。在这里,您可以将缺失的块添加到白名单。只需block_name在该Block Name *字段的错误消息中输入显示的,将其设置Is Allowed为“是”,然后单击Save Block按钮即可。

不要忘记刷新缓存。现在允许您缺少块,并且错误应该消失了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.