Answers:
此消息表示您的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
按钮即可。
不要忘记刷新缓存。现在允许您缺少块,并且错误应该消失了。