Antworten:
Diese Meldung bedeutet, dass einer der in Ihrem Magento-Store verwendeten Blöcke nicht auf der Whitelist steht.
Mit dem Sicherheitspatch SUPEE-6788 und Magento CE 1.9.2.2 wurde eine neue Whitelist für Blöcke eingeführt. Magento enthält jetzt eine Whitelist mit zulässigen Blöcken oder Anweisungen. Wenn ein Modul oder eine Erweiterung Variablen wie {{config path=”web/unsecure/base_url”}}
und {{block type=rss/order_new}}
in CMS-Seiten oder E-Mails verwendet und die Direktiven nicht in dieser Liste enthalten sind, müssen Sie sie Ihrer Datenbank hinzufügen. Befindet sich ein Block nicht in der Whitelist, wird er nicht gerendert.
Error
Ab dem Sicherheitspatch SUPEE-7405 und Magento CE 1.9.2.3 gibt es ein neues Kernfeature, mit dem Sie problemlos Blöcke identifizieren können, die in der Whitelist für Sie fehlen. Die blockDirective($construction)
Funktion in
app/code/core/Mage/Core/Model/Email/Template/Filter.php
wurde aktualisiert und sieht nun so aus:
/**
* 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();
}
Beachten Sie das Neue
Mage::log('Security problem: ' . $blockParameters['type'] . ' has not been whitelisted.');
Wenn ein Block in der Whitelist fehlt, wird er vom System erkannt und ein Fehler mit dem Namen des fehlenden Blocks in der system.log
Datei in ausgegeben
[your magento install dir]/var/log/
Natürlich muss die Protokollierung aktiviert sein, um diese Nachricht zu erhalten. Dies ist der Fehler, den Sie sehen werden
DEBUG (7): Sicherheitsproblem:
block_name
wurde nicht in die Whitelist aufgenommen.
Wie repariert man
Um dies zu beheben, müssen Sie den Namen der fehlenden Blöcke manuell zur Whitelist hinzufügen. Fügen Sie nur vertrauenswürdige Blöcke hinzu. Wenn Sie nicht wissen, woher der Block kommt, finden Sie dies zuerst heraus. Wenn Sie sicher sind, dass Sie den fehlenden Block hinzufügen möchten, gehen Sie in Ihrem Magento Admin-Panel zu
System > Permissions > Blocks
und klicken Sie auf die Add New Block
Schaltfläche. Von hier aus können Sie den fehlenden Block zur Whitelist hinzufügen. Geben Sie einfach das block_name
, was in Ihrer Fehlermeldung angezeigt wird, in das Block Name *
Feld ein, setzen Sie es Is Allowed
auf "Ja" und Save Block
drücken Sie die Taste.
Vergiss nicht den Cache zu leeren. Ihr fehlender Block ist jetzt erlaubt und der Fehler sollte verschwunden sein.