Odpowiedzi:
Ten komunikat oznacza, że jeden z bloków używanych w sklepie Magento nie znajduje się na białej liście.
Wraz z poprawką bezpieczeństwa SUPEE-6788 i Magento CE 1.9.2.2 wprowadzono nową białą listę bloków. Magento zawiera teraz białą listę dozwolonych bloków lub dyrektyw. Jeśli moduł lub rozszerzenie używa zmiennych takich jak {{config path=”web/unsecure/base_url”}}
i {{block type=rss/order_new}}
na stronach CMS lub w wiadomościach e-mail, a dyrektyw nie ma na tej liście, musisz dodać je do bazy danych. Jeśli blok nie znajduje się na białej liście, nie będzie renderowany.
Błąd
Od poprawki bezpieczeństwa SUPEE-7405 i Magento CE 1.9.2.3 wprowadzono nową podstawową funkcję, która z łatwością zidentyfikuje dla Ciebie brakujące bloki na białej liście. blockDirective($construction)
Funkcja w
app/code/core/Mage/Core/Model/Email/Template/Filter.php
został zaktualizowany i teraz wygląda następująco:
/**
* 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();
}
Zwróć uwagę na nowy
Mage::log('Security problem: ' . $blockParameters['type'] . ' has not been whitelisted.');
Jeśli na białej liście brakuje bloku, system go wykryje i wydrukuje błąd, w tym nazwę brakujących bloków w system.log
pliku znajdującym się w
[your magento install dir]/var/log/
Oczywiście musisz mieć włączone logowanie, aby otrzymać ten komunikat. To błąd, który zobaczysz
DEBUG (7): Problem bezpieczeństwa:
block_name
nie został dodany do białej listy.
Jak naprawić
Aby to naprawić, musisz ręcznie dodać nazwę brakujących bloków do białej listy. Dodawaj tylko zaufane bloki. Jeśli nie wiesz, skąd pochodzi blok, dowiedz się najpierw. Gdy masz pewność, że chcesz dodać brakujący blok, przejdź do panelu administracyjnego Magento
System > Permissions > Blocks
i kliknij Add New Block
przycisk. Stąd możesz dodać brakujący blok do białej listy. Wystarczy wpisać w polu, block_name
które pojawił się w komunikacie o błędzie Block Name *
, ustawić Is Allowed
na „Tak” i nacisnąć Save Block
przycisk.
Nie zapomnij opróżnić pamięci podręcznej. Twój brakujący blok jest teraz dozwolony i błąd powinien zniknąć.