APPSEC-1057 Як додати змінні чи блоки до таблиць білого списку


45

APPSEC-1057 (частина SUPEE-6788) штатів

Magento тепер включає білий список дозволених блоків або директив. Якщо модуль або хто - небудь використовує змінні , як {{config path=”web/unsecure/base_url”}}і {{block type=rss/order_new}}в CMS сторінок або повідомлень електронної пошти, а також директиви немає в цьому списку, вам потрібно буде додати їх за допомогою сценарію установки бази даних.

На це можуть вплинути розширення або спеціальний код, який обробляє вміст (наприклад, розширення блогу). Якщо ваш код використовує деякі конфігураційні змінні чи блоки, вам потрібно створити скрипт оновлення даних, який додає змінні чи блоки до таблиць білого списку:

Як ви створюєте білий список спеціальних змінних та блоків?

Відповіді:


38

Для повноти ви можете вручну додати блоки та змінні до білих списків у розділі Система> Дозволи> Змінні та система> Дозволи> Блоки . Коди, які ви додаєте там, знаходяться у формі web/unsecure/base_url(конфігураційний шлях) або rss/order_new(псевдонім класу блоків).

Оригінальна відповідь

Мій сценарій оновлення виглядає приблизно так:

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

Замініть $blockNamesі $variableNamesсвоїми. Наступний інструмент допомагає знайти використані змінні та блоки: https://github.com/peterjaap/magerun-addons

Завантаження змінних / блоків спочатку гарантує, що ви не намагаєтеся вставити дублікати (це призведе до збою сценарію). Це сталося зі мною, тому що скрипт показав мені змінні "trans_email / ident_general / email" та "trans_email / ident_support / email", які вже містяться у списку остаточного випуску виправлення.

Як використовувати сценарій оновлення

Розмістіть його у спеціальному модулі як сценарій оновлення даних (сценарії оновлення даних запускаються після звичайного сценарію оновлення; це гарантує, що таблиці вже існують). Якщо у вас ще немає модуля, який ви використовуєте для оновлення конфігурації, створіть його так:

app / тощо / модулі / 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

(як зазначено вище)


1
Це добре працювало для моїх спеціальних блоків. Я не повністю розумію, як працює змінна біла списка. Змінні в моїх існуючих спеціальних модулях не відображаються у білому списку, але працюють.
paj

1
блоки показують, але db не змінюється. weird
Claudiu Creanga

просто для уточнення мого коментаря, що стосується змінних, чи ми говоримо про білі списки змінних, що викликаються у файлах cms або локалі, тобто шаблонах електронної пошти, використовуючи {config path =, а не змінні користувацькі модулі, доступ до яких в PHP здійснюється з Mage :: getStoreConfig ('my_var')? Поки інструменти знайшли блоки, які не містяться у списку, але не мають змінних.
paj

{{config}}потрібні лише директиви. Код призначений для проектів, а не для розширень, тому я припускаю, що це магазин виправлених, але розширення повинні перевірити версію Magento (а ще краще - перевірити, чи існують таблиці)
Fabian Schmengler

3
Оновлено знову приємнішим чеком завдяки @ mam08ixo gist.github.com/mam08ixo/3937df764da7a6816a1d
Fabian Schmengler

16

Ви можете додати їх вручну в сервер Magento в розділі Система> Дозволи> Змінні та система> Дозволи та блоки після встановлення Magento 1.9.2.2.

До плагінів, які використовують користувацькі змінні блоків, потрібно буде додати сценарій оновлення даних з кодом, подібним, як показано нижче.

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
Це буде працювати лише для спільноти, я додав би чек на CE та 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 ','> = ')) {
Володимир Керхофф

1
як @DmitryFurs заявив, що там краще перевірте, чи існує функція , перевіряючи таблиці або існування полів конфігурації, але не у версії
Anton S

Добрий момент Володимир та Антон. Я спробував скористатися цим, якщо ($ installer-> getConnection () -> isTableExists ($ installer-> getTable ('адміністратор / дозвіл_блок'))) {...}, але це призведе до помилки. Будь-яка ідея про те, як поперше перевірити, чи існує таблиця, і нічого не робити, якщо це не так?
Solide

Я оновив свою відповідь, ви можете використовувати if (Mage :: getModel ('admin / block')) {...}
Solide

5

Ви можете знайти нові таблиці після встановлення SUPEE-6788патча

permission_variable

permission_block

І ви можете додати деякі змінні конфігурації або блоки до цих таблиць білого списку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.