DEPURACIÓN (7): Problema de seguridad: block_name no se ha incluido en la lista blanca. (Magento system.log)

22

En el system.logarchivo de mi instalación de Magento tengo el siguiente mensaje de error

DEPURACIÓN (7): Problema de seguridad: block_nameno se ha incluido en la lista blanca.

¿Dónde block_nameestá el nombre de un bloque utilizado en mi tienda?

¿Qué significa y cómo lo soluciono?

Formato
fuente

Respuestas:

28

Este mensaje significa que uno de los bloques que se usa en su tienda Magento no está en la lista blanca.

Con Security Patch SUPEE-6788 y Magento CE 1.9.2.2 se introdujo una nueva lista blanca para bloques. Magento ahora incluye una lista blanca de bloques o directivas permitidas. Si un módulo o extensión usa variables como {{config path=”web/unsecure/base_url”}}y {{block type=rss/order_new}}en páginas o correos electrónicos de CMS, y las directivas no están en esta lista, deberá agregarlas a su base de datos. Si un bloque no está en la lista blanca, no se representará.

Error

A partir del parche de seguridad SUPEE-7405 y Magento CE 1.9.2.3, hay una nueva característica central que identificará fácilmente los bloques que faltan en la lista blanca para usted. La blockDirective($construction)función en

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

fue actualizado y ahora se ve así:

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

Note lo nuevo

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

Si falta un bloque de la lista blanca, el sistema lo detectará e imprimirá un error que incluye el nombre de los bloques que faltan en el system.logarchivo ubicado en

[your magento install dir]/var/log/

Por supuesto, debe tener habilitado el registro para obtener este mensaje. Este es el error que verás

DEPURACIÓN (7): Problema de seguridad: block_nameno se ha incluido en la lista blanca.

Como arreglar

Para solucionar esto, deberá agregar manualmente el nombre de los bloques que faltan a la lista blanca. Solo agrega bloques en los que confíes. Si no sabes de dónde viene el bloque, descúbrelo primero. Una vez que esté seguro de que desea agregar el bloque que falta, en su Panel de administración de Magento vaya a

System > Permissions > Blocks

y haga clic en el Add New Blockbotón Desde aquí puede agregar el bloque que falta a la lista blanca. Simplemente ingrese lo block_nameque apareció en su mensaje de error en el Block Name *campo, configúrelo Is Alloweden "Sí" y presione el Save Blockbotón.

No olvides vaciar el caché. Su bloque faltante ahora está permitido y el error debería desaparecer.

Formato
fuente