DEBUG (7): Problem bezpieczeństwa: nazwa_bloku nie została dodana do białej listy. (Magento system.log)

22

W system.logpliku mojej instalacji Magento pojawia się następujący komunikat o błędzie

DEBUG (7): Problem bezpieczeństwa: block_namenie został dodany do białej listy.

gdzie block_namejest nazwa bloku używanego w moim sklepie.

Co to znaczy i jak to naprawić?

Format
źródło

Odpowiedzi:

28

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.logpliku 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_namenie 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 Blockprzycisk. Stąd możesz dodać brakujący blok do białej listy. Wystarczy wpisać w polu, block_namektóre pojawił się w komunikacie o błędzie Block Name *, ustawić Is Allowedna „Tak” i nacisnąć Save Blockprzycisk.

Nie zapomnij opróżnić pamięci podręcznej. Twój brakujący blok jest teraz dozwolony i błąd powinien zniknąć.

Format
źródło