DEBUG (7): Problema di sicurezza: block_name non è stato inserito nella whitelist. (Magento system.log)


22

Nel system.logfile della mia installazione di Magento ho il seguente messaggio di errore

DEBUG (7): Problema di sicurezza: block_namenon è stato autorizzato.

dov'è block_nameil nome di un blocco usato nel mio negozio.

Cosa significa e come posso ripararlo?

Risposte:


28

Questo messaggio indica che uno dei blocchi utilizzati nel tuo negozio Magento non è nella lista bianca.

Con Security Patch SUPEE-6788 e Magento CE 1.9.2.2 è stata introdotta una nuova whitelist per blocchi. Magento ora include una lista bianca di blocchi o direttive consentiti. Se un modulo o un'estensione utilizza variabili come {{config path=”web/unsecure/base_url”}}e {{block type=rss/order_new}}nelle pagine CMS o nelle e-mail e le direttive non sono in questo elenco, sarà necessario aggiungerle al database. Se un blocco non si trova nella whitelist, non verrà reso.

Errore

A partire dalla patch di sicurezza SUPEE-7405 e Magento CE 1.9.2.3 è disponibile una nuova funzionalità di base che identificherà facilmente i blocchi mancanti nella whitelist. La blockDirective($construction)funzione in

app/code/core/Mage/Core/Model/Email/Template/Filter.php

è stato aggiornato e ora si presenta così:

/**
 * 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();
}

Notare il nuovo

Mage::log('Security problem: ' . $blockParameters['type'] . ' has not been whitelisted.');

Se nella whitelist manca un blocco, il sistema lo rileverà e stamperà un errore incluso il nome dei blocchi mancanti nel system.logfile situato in

[your magento install dir]/var/log/

Naturalmente è necessario avere la registrazione abilitata per ottenere questo messaggio. Questo è l'errore che vedrai

DEBUG (7): Problema di sicurezza: block_namenon è stato autorizzato.

Come risolvere

Per risolvere questo problema dovrai aggiungere manualmente il nome dei blocchi mancanti alla whitelist. Aggiungi solo blocchi di cui ti fidi. Se non sai da dove proviene il blocco, scoprilo prima. Una volta che sei sicuro di voler aggiungere il blocco mancante, nel pannello di amministrazione di Magento vai a

System > Permissions > Blocks

e fai clic sul Add New Blockpulsante. Da qui è possibile aggiungere il blocco mancante alla lista bianca. Inserisci nel campo block_namequello visualizzato nel messaggio di errore Block Name *, imposta Is Allowed"Sì" e premi il Save Blockpulsante.

Non dimenticare di svuotare la cache. Il blocco mancante è ora consentito e l'errore dovrebbe essere sparito.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.