APPSEC-1057 Beyaz liste tablolarına değişkenler veya bloklar nasıl eklenir


45

APPSEC-1057 (SUPEE-6788’in bir parçası)

Magento artık izin verilen blokların veya direktiflerin bir beyaz listesini içermektedir. Bir modül veya herhangi biri, CMS sayfalarında veya e-postalarında {{config path=”web/unsecure/base_url”}}ve benzeri değişkenler kullanıyorsa {{block type=rss/order_new}}ve yönergeler bu listede yoksa, bunları veritabanı yükleme komut dosyanızla eklemeniz gerekir.

İçeriği işleyen uzantılar veya özel kod (blog uzantıları gibi) etkilenebilir. Kodunuz bazı config değişkenleri veya blokları kullanıyorsa, beyaz liste tablolarına değişkenler veya bloklar ekleyen bir veri güncelleme komut dosyası oluşturmanız gerekir:

Özel değişkenleri ve blokları nasıl beyaz listeye alıyorsunuz?

Yanıtlar:


38

Tamamlanma uğruna, Sistem> İzinler> Değişkenler ve Sistem> İzinler> Bloklar altındaki beyaz listelere manuel olarak bloklar ve değişkenler ekleyebilirsiniz . Orada eklediğiniz kodlar formda web/unsecure/base_url(config yolu) veya rss/order_new(blok sınıfı diğer adı).

Orijinal cevap

Yükseltme betiğim şöyle görünüyor:

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

Değiştirin $blockNamesve $variableNameskendiniz ile değiştirin . Aşağıdaki araç kullanılmış değişkenleri ve blokları bulmanıza yardımcı olur: https://github.com/peterjaap/magerun-addons

Değişkenleri / blokları önce yüklemek, kopya eklemeyi denememenizi sağlar (bu komut dosyası çökmesine neden olur). Bu benim başıma geldi çünkü senaryo bana son yama bülteninde zaten beyaz listeye alınan "trans_email / ident_general / email" ve "trans_email / ident_support / email" değişkenlerini gösterdi.

Yükseltme komut dosyası nasıl kullanılır?

Veri yükseltme komut dosyası olarak özel bir modüle yerleştirin (veri yükseltme komut dosyaları normal yükseltme komut dosyasından sonra çalıştırılır, bu tabloların zaten var olmasını sağlar). Konfigürasyon güncellemeleri için kullandığınız bir modül henüz yoksa, bu şekilde oluşturun:

Uygulamanın / etc / modules / Project_Config.xml

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

Uygulamanın / kod / yerel / Proje / Yapılandırma / 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>

Uygulamanın / kod / yerel / Proje / Yapılandırma / veri / project_config / veri yükleme-0.1.0.php

(yukarıdaki gibi)


1
Bu benim özel bloklarım için iyi çalıştı. Değişken beyaz listenin nasıl çalıştığını tam olarak anlamadım. Mevcut özel modüllerimdeki değişkenler beyaz listede görünmüyor, ancak çalışıyor.
paj

1
bloklar gösterilir, ancak db değişmez. garip
Claudiu Creanga 29:15

sadece yukarıdaki değişkenler hakkındaki yorumumu açıklığa kavuşturmak için, cms veya yerel dosyalarda adı verilen beyaz liste değişkenlerinden bahsediyoruz, yani {config path = kullanan e-posta şablonları ve PHP'de Mage :: getStoreConfig ('my_var') ile erişilen özel modül değişkenleri değil mi? Şu ana kadar, araçlar beyaz listeye alınmamış ancak değişken olmayan bloklar buldular.
paj

sadece {{config}}direktiflerin beyaz listeye ihtiyacı vardır. Kod, uzantılar için değil, projeler için tasarlandı, bu yüzden bir yamalı mağazayı kabul ediyorum, ancak uzantılar Magento versiyonunu kontrol etmeli (veya daha iyisi, tabloların var olup olmadığını kontrol etmelisiniz)
Fabian Schmengler


16

Magento 1.9.2.2 kurulduktan sonra bunları Sistem> İzinler> Değişkenler ve Sistem> İzinler> Bloklar altındaki Magento arka ucuna manuel olarak ekleyebilirsiniz.

Özel blok değişkenleri kullanan eklentilerin, aşağıda gösterildiği gibi kod içeren bir veri yükseltme betiği eklemesi gerekir.

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
Bu sadece topluluk baskısı için çalışacak, CE ve EE kontrolünü ekleyeceğim: eğer ((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
@DmitryFurs’un belirttiği gibi , özelliklerin tabloları kontrol ederek veya konfigürasyon alanlarının varlığını kontrol ederek varlığını kontrol etmek daha iyidir
Anton S

İyi nokta Vladimir ve Anton. İf ($ installer-> getConnection () -> isTableExists ($ installer-> getTable ('admin / allow_block'))) {...} kullanmaya çalıştım ancak bir hatayla sonuçlandı. Tablonun var olup olmadığını nasıl kontrol edeceğiniz ve yapmıyorsa hiçbir şey yapmama konusunda bir fikriniz var mı?
Solide

Cevabımı güncelledim, eğer kullanabilirsiniz (Mage :: getModel ('admin / block')) {...}
Solide

5

SUPEE-6788Yama yüklendikten sonra yeni tablolar olduğunu görebilirsiniz.

permission_variable

permission_block

Ve bu beyaz liste tablolarına bazı config değişkenleri veya blokları ekleyebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.