Risposte:
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.log
file 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_name
non è 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 Block
pulsante. Da qui è possibile aggiungere il blocco mancante alla lista bianca. Inserisci nel campo block_name
quello visualizzato nel messaggio di errore Block Name *
, imposta Is Allowed
"Sì" e premi il Save Block
pulsante.
Non dimenticare di svuotare la cache. Il blocco mancante è ora consentito e l'errore dovrebbe essere sparito.