Ce message signifie que l'un des blocs utilisés dans votre boutique Magento n'est pas sur la liste blanche.
Avec Security Patch SUPEE-6788 et Magento CE 1.9.2.2, une nouvelle liste blanche pour les blocs a été introduite. Magento inclut désormais une liste blanche des blocs ou directives autorisés. Si un module ou une extension utilise des variables comme {{config path=”web/unsecure/base_url”}}
et {{block type=rss/order_new}}
dans les pages ou les e-mails du CMS et que les directives ne figurent pas dans cette liste, vous devrez les ajouter à votre base de données. Si un bloc n'est pas sur la liste blanche, il ne sera pas rendu.
Erreur
Depuis le patch de sécurité SUPEE-7405 et Magento CE 1.9.2.3, il existe une nouvelle fonctionnalité de base qui identifiera facilement les blocs manquants dans la liste blanche pour vous. La blockDirective($construction)
fonction dans
app/code/core/Mage/Core/Model/Email/Template/Filter.php
a été mis à jour et ressemble maintenant à ceci:
/**
* 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();
}
Remarquez le nouveau
Mage::log('Security problem: ' . $blockParameters['type'] . ' has not
been whitelisted.');
Si un bloc est absent de la liste blanche, le système le détectera et affichera une erreur incluant le nom des blocs manquants dans le system.log
fichier situé dans
[your magento install dir]/var/log/
Bien sûr, vous devez activer la journalisation pour obtenir ce message. C'est l'erreur que vous verrez
DEBUG (7): Problème de sécurité: block_name
n'a pas été ajouté à la liste blanche.
Comment réparer
Pour résoudre ce problème, vous devrez ajouter manuellement le nom des blocs manquants à la liste blanche. Ajoutez uniquement des blocs auxquels vous faites confiance. Si vous ne savez pas d'où vient le bloc, découvrez-le d'abord. Une fois que vous êtes sûr de vouloir ajouter le bloc manquant, dans votre panneau d'administration Magento, accédez à
System > Permissions > Blocks
et cliquez sur le Add New Block
bouton. De là, vous pouvez ajouter le bloc manquant à la liste blanche. Entrez simplement le block_name
qui apparaît dans votre message d'erreur dans le Block Name *
champ, réglez Is Allowed
sur "Oui" et appuyez sur le Save Block
bouton.
N'oubliez pas de vider le cache. Votre bloc manquant est maintenant autorisé et l'erreur devrait avoir disparu.