APPSEC-1057 Come aggiungere variabili o blocchi alle tabelle della white list


45

APPSEC-1057 (parte di SUPEE-6788) afferma

Magento ora include una whitelist di blocchi o direttive consentiti. Se un modulo o qualcuno 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 con lo script di installazione del database.

Le estensioni o il codice personalizzato che gestisce il contenuto (come le estensioni del blog) potrebbero essere interessati. Se il codice utilizza alcune variabili o blocchi di configurazione, è necessario creare uno script di aggiornamento dei dati che aggiunge variabili o blocchi alle tabelle della lista bianca:

Come si inseriscono nella whitelist variabili e blocchi personalizzati?

Risposte:


38

Per completezza, è possibile aggiungere manualmente blocchi e variabili alle liste bianche in Sistema> Autorizzazioni> Variabili e sistema> Autorizzazioni> Blocchi . I codici aggiunti lì sono nel modulo web/unsecure/base_url(percorso di configurazione) o rss/order_new(alias della classe di blocco).

Risposta originale

Il mio script di aggiornamento è simile al seguente:

/*
 * Make sure the upgrade is not performed on installations without the tables
 * (i.e. unpatched shops).
 */
$adminVersion = Mage::getConfig()->getModuleConfig('Mage_Admin')->version;
if (version_compare($adminVersion, '1.6.1.2', '>=')) {

    $blockNames = array(
        'cms/block',
        'catalog/product_list',
        'germany/impressum',
        'page/html',
        'magesetup/imprint_field',
        'magesetup/imprint_content'
    );
    foreach ($blockNames as $blockName) {
        $whitelistBlock = Mage::getModel('admin/block')->load($blockName, 'block_name');
        $whitelistBlock->setData('block_name', $blockName);
        $whitelistBlock->setData('is_allowed', 1);
        $whitelistBlock->save();
    }

    $variableNames = array(
        'design/email/logo_alt',
        'design/email/logo_width',
        'design/email/logo_height',
    );

    foreach ($variableNames as $variableName) {
        $whitelistVar = Mage::getModel('admin/variable')->load($variableName, 'variable_name');
        $whitelistVar->setData('variable_name', $variableName);
        $whitelistVar->setData('is_allowed', 1);
        $whitelistVar->save();
    }
}

Sostituisci $blockNamese $variableNamescon il tuo. Il seguente strumento aiuta a trovare variabili e blocchi usati: https://github.com/peterjaap/magerun-addons

Il caricamento delle variabili / dei blocchi assicura innanzitutto che non si provi a inserire duplicati (ciò causerebbe l'arresto anomalo dello script). Questo mi è successo perché lo script mi ​​mostrava le variabili "trans_email / ident_general / email" e "trans_email / ident_support / email" che sono già presenti nella whitelist nella versione finale della patch.

Come utilizzare lo script di aggiornamento

Inseriscilo in un modulo personalizzato come script di aggiornamento dei dati (gli script di aggiornamento dei dati vengono eseguiti dopo il normale script di aggiornamento, questo assicura che le tabelle esistano già). Se non hai ancora un modulo che usi per gli aggiornamenti di configurazione, crealo in questo modo:

app / etc / modules / Project_Config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Project_Config>
            <active>true</active>
            <codePool>local</codePool>
        </Project_Config>
    </modules>
</config>

app / code / local / progetto / config / etc / config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Project_Config>
            <version>0.1.0</version>
        </Project_Config>
    </modules>
    <global>
        <resources>
            <project_config>
                <setup>
                    <module>Project_Config</module>
                    <class>Mage_Core_Model_Resource_Setup</class>
                </setup>
            </project_config>
        </resources>
    </global>
</config>

app / code / / progetto / config / dati / project_config / dati-installazione-0.1.0.php locale

(come sopra)


1
Questo ha funzionato bene per i miei blocchi personalizzati. Non capisco fino in fondo come funziona la whitelist variabile. Le variabili nei miei moduli personalizzati esistenti non vengono visualizzate nella whitelist, ma funzionano.
paj,

1
i blocchi mostrano, ma il db non è cambiato. strano
Claudiu Creanga,

solo per chiarire il mio commento sopra riguardo alle variabili, stiamo parlando di variabili di whitelisting chiamate in cms o file locali, ad esempio modelli di e-mail usando {config path = e non variabili di modulo personalizzate accessibili in PHP con Mage :: getStoreConfig ('my_var')? Finora gli strumenti hanno trovato blocchi che non sono autorizzati, ma senza variabili.
paj,

solo le {{config}}direttive devono essere autorizzate. Il codice è destinato ai progetti, non alle estensioni, quindi presumo un negozio con patch, ma le estensioni dovrebbero verificare la versione di Magento (o meglio, verificare se esistono tabelle)
Fabian Schmengler,

3
Aggiornato di nuovo con un controllo migliore grazie a @ mam08ixo gist.github.com/mam08ixo/3937df764da7a6816a1d
Fabian Schmengler

16

Puoi aggiungerli manualmente nel backend Magento in Sistema> Autorizzazioni> Variabili e sistema> Autorizzazioni> Blocchi dopo l'installazione di Magento 1.9.2.2.

I plug-in che utilizzano variabili personalizzate di blocchi dovranno aggiungere uno script di aggiornamento dei dati con codice simile a quello mostrato di seguito.

if (Mage::getModel('admin/block')) {

    $installer = $this;
    $installer->startSetup();
    $connection = $installer->getConnection();

    $installer->getConnection()->insertMultiple(
        $installer->getTable('admin/permission_block'),
        array(
            array('block_name' => 'flexslider/view', 'is_allowed' => 1),
        )
    );

    $installer->endSetup();

}

1
Funzionerà solo per l'edizione della comunità, aggiungerei il segno di spunta su CE ed EE: if ((Mage :: getEdition () == Mage :: EDITION_COMMUNITY && version_compare (Mage :: getVersion (), '1.9.2.2', ' > = ')) || (Mage :: getEdition () == Mage :: EDITION_ENTERPRISE && version_compare (Mage :: getVersion (),' 1.14.2.2 ','> = ')) {
Vladimir Kerkhoff,

1
come @DmitryFurs ha affermato che è meglio verificare se esiste una funzionalità controllando le tabelle o l'esistenza dei campi di configurazione ma non sulla versione
Anton S

Buon punto Vladimir e Anton. Ho provato a usarlo se ($ installer-> getConnection () -> isTableExists ($ installer-> getTable ('admin / permesso_block'))) {...} ma si verifica un errore. Qualche idea su come controllare popolarmente se la tabella esiste e non fare nulla se non lo fa?
Solide,

Ho aggiornato la mia risposta, puoi usare if (Mage :: getModel ('admin / block')) {...}
Solide,

5

È possibile trovare nuove tabelle dopo l' SUPEE-6788installazione della patch

permission_variable

permission_block

E puoi aggiungere alcune variabili di configurazione o blocchi a queste tabelle della whitelist.

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.