Ответы:
Это сообщение означает, что один из блоков, который используется в вашем магазине 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
кнопку.
Не забудьте очистить кеш. Ваш отсутствующий блок теперь разрешен, и ошибка должна быть устранена.