Respostas:
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.log
arquivo 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_name
nã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 Block
botão A partir daqui, você pode adicionar o bloco ausente à lista de permissões. Basta digitar o block_name
que apareceu na sua mensagem de erro no Block Name *
campo, defina Is Allowed
como "Sim" e pressione o Save Block
botão.
Não se esqueça de liberar o cache. Seu bloco ausente agora é permitido e o erro deve desaparecer.