APPSEC-1057 Jak dodawać zmienne lub bloki do tabel białej listy


45

Stan APPSEC-1057 (część SUPEE-6788)

Magento zawiera teraz białą listę dozwolonych bloków lub dyrektyw. Jeśli moduł lub ktoś używa zmiennych takich jak {{config path=”web/unsecure/base_url”}}i {{block type=rss/order_new}}na stronach CMS lub w e-mailach, a dyrektyw nie ma na tej liście, musisz je dodać za pomocą skryptu instalacyjnego bazy danych.

Może to mieć wpływ na rozszerzenia lub niestandardowy kod, który obsługuje treść (np. Rozszerzenia blogów). Jeśli twój kod używa zmiennych lub bloków konfiguracji, musisz utworzyć skrypt aktualizacji danych, który doda zmienne lub bloki do tabel białej listy:

Jak dodać do listy niestandardowe zmienne i bloki?

Odpowiedzi:


38

Dla kompletności możesz ręcznie dodawać bloki i zmienne do białych list w obszarze System> Uprawnienia> Zmienne i System> Uprawnienia> Bloki . Kody, które tam dodajesz, mają postać web/unsecure/base_url(ścieżka konfiguracji) lub rss/order_new(alias klasy bloku).

Oryginalna odpowiedź

Mój skrypt aktualizacji wygląda następująco:

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

Wymień $blockNamesi $variableNamesna własny. Następujące narzędzie pomaga znaleźć używane zmienne i bloki: https://github.com/peterjaap/magerun-addons

Ładowanie zmiennych / bloków najpierw upewnia się, że nie próbujesz wstawiać duplikatów (spowodowałoby to awarię skryptu). Stało się tak, ponieważ skrypt pokazał mi zmienne „trans_email / ident_general / email” i „trans_email / ident_support / email”, które są już na białej liście w końcowej wersji łatki.

Jak korzystać ze skryptu aktualizacji

Umieść go w niestandardowym module jako skrypt aktualizacji danych (skrypty aktualizacji danych są uruchamiane po normalnym skrypcie aktualizacji, dzięki czemu tabele już istnieją). Jeśli nie masz jeszcze modułu używanego do aktualizacji konfiguracji, utwórz go w następujący sposób:

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 / Project / 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 / local / Project / Config / data / project_config / data-install-0.1.0.php

(jak powyżej)


1
Działa to dobrze dla moich niestandardowych bloków. Nie do końca rozumiem, jak działa biała lista zmiennych. Zmienne w moich istniejących niestandardowych modułach nie pojawiają się na białej liście, ale działają.
paj

1
bloki pokazują, ale db nie ulega zmianie. dziwne
Claudiu Creanga

aby wyjaśnić mój komentarz dotyczący zmiennych, czy mówimy o zmiennych na białej liście wywoływanych w plikach cms lub plikach ustawień regionalnych, tj. szablonach wiadomości e-mail używających {ścieżka konfiguracji = a nie niestandardowych zmiennych modułowych dostępnych w PHP za pomocą Mage :: getStoreConfig ('my_var')? Do tej pory narzędzia znalazły bloki, które nie są na białej liście, ale nie mają zmiennych.
paj

tylko {{config}}dyrektywy wymagają białej listy. Kod jest przeznaczony dla projektów, a nie dla rozszerzeń, więc zakładam załatany sklep, ale rozszerzenia powinny sprawdzić wersję Magento (lub lepiej, sprawdzić, czy tabele istnieją)
Fabian Schmengler

3
Zaktualizowano ponownie z ładniejszym czekiem dzięki @ mam08ixo gist.github.com/mam08ixo/3937df764da7a6816a1d
Fabian Schmengler

16

Możesz dodać je ręcznie w zapleczu Magento w obszarze System> Uprawnienia> Zmienne i System> Uprawnienia> Bloki po zainstalowaniu Magento 1.9.2.2.

Wtyczki używające niestandardowych zmiennych bloków będą musiały dodać skrypt aktualizacji danych o kodzie podobnym do pokazanego poniżej.

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
Będzie to działać tylko w przypadku edycji wspólnotowej, dodam zaznaczenie na CE i 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
jak stwierdził @DmitryFurs, lepiej sprawdź, czy funkcja istnieje , sprawdzając tabele lub istnienie pól konfiguracji, ale nie w wersji
Anton S

Dobra uwaga Vladimir i Anton. Próbowałem użyć tego, jeśli ($ installer-> getConnection () -> isTableExists ($ installer-> getTable ('admin / pozwolenie_bloku'))) {...}, ale powoduje to błąd. Masz pomysł, jak poperly sprawdzić, czy tabela istnieje i nic nie robić, jeśli nie istnieje?
Solide

Zaktualizowałem moją odpowiedź, możesz użyć if (Mage :: getModel ('admin / block')) {...}
Solide

5

Można znaleźć nowe tabele po SUPEE-6788zainstalowaniu łatki

permission_variable

permission_block

I możesz dodać zmienne konfiguracyjne lub bloki do tych tabel białej listy.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.