DEBUG (7): проблема безопасности: имя_блока не занесено в белый список. (Magento system.log)

22

В system.logфайле моей установки Magento у меня есть следующее сообщение об ошибке

ОТЛАДКА (7): Проблема безопасности: block_nameне внесена в белый список.

где block_nameимя блока, используемого в моем магазине.

Что это значит и как мне это исправить?

Формат
источник

Ответы:

28

Это сообщение означает, что один из блоков, который используется в вашем магазине Magento, отсутствует в белом списке.

С Патчем безопасности SUPEE-6788 и Magento 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кнопку.

Не забудьте очистить кеш. Ваш отсутствующий блок теперь разрешен, и ошибка должна быть устранена.

Формат
источник