DEBUG (7): Problema de segurança: block_name não foi incluído na lista de permissões. (Magento system.log)

22

No system.logarquivo da minha instalação do Magento, tenho a seguinte mensagem de erro

DEBUG (7): Problema de segurança: block_namenão foi incluído na lista de permissões.

onde block_nameé o nome de um bloco usado na minha loja.

O que significa e como faço para corrigi-lo?

Formato
fonte

Respostas:

28

Esta mensagem significa que um dos blocos usados ​​na sua loja Magento não está na lista de permissões.

Com o Patch de segurança SUPEE-6788 e Magento CE 1.9.2.2, uma nova lista de desbloqueio para blocos foi introduzida. Magento agora inclui uma lista branca de blocos ou diretivas permitidas. Se um módulo ou extensão usar variáveis ​​como {{config path=”web/unsecure/base_url”}}e {{block type=rss/order_new}}em páginas ou e-mails do CMS, e as diretivas não estiverem nessa lista, você precisará adicioná-las ao seu banco de dados. Se um bloco não estiver na lista de permissões, ele não será renderizado.

Erro

A partir do Patch de segurança SUPEE-7405 e Magento CE 1.9.2.3, há um novo recurso principal que identificará facilmente os blocos que estão faltando na lista de permissões para você. A blockDirective($construction)função em

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

foi atualizado e agora fica assim:

/**
 * 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();
}

Observe o novo

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

Se um bloco estiver faltando na lista de permissões, o sistema o detectará e imprimirá um erro, incluindo o nome do bloco ausente no system.logarquivo localizado em

[your magento install dir]/var/log/

Claro que você deve ter o log ativado para receber esta mensagem. Este é o erro que você verá

DEBUG (7): Problema de segurança: block_namenão foi incluído na lista de permissões.

Como consertar

Para corrigir isso, você precisará adicionar manualmente o nome dos blocos ausentes à lista de permissões. Adicione apenas blocos confiáveis. Se você não sabe de onde o bloco está vindo, descubra primeiro. Depois de ter certeza de que deseja adicionar o bloco ausente, no painel de administração do Magento, vá para

System > Permissions > Blocks

e clique no Add New Blockbotão A partir daqui, você pode adicionar o bloco ausente à lista de permissões. Basta digitar o block_nameque apareceu na sua mensagem de erro no Block Name *campo, defina Is Allowedcomo "Sim" e pressione o Save Blockbotão.

Não se esqueça de liberar o cache. Seu bloco ausente agora é permitido e o erro deve desaparecer.

Formato
fonte