APPSEC-1057 Cara menambahkan variabel atau blok ke tabel daftar putih

45

APPSEC-1057 (bagian dari SUPEE-6788) menyatakan

Magento sekarang menyertakan daftar putih dari blok atau arahan yang diizinkan. Jika modul atau siapa pun menggunakan variabel seperti {{config path=”web/unsecure/base_url”}}dan {{block type=rss/order_new}}di halaman CMS atau email, dan arahan tidak ada dalam daftar ini, Anda perlu menambahkannya dengan skrip instalasi database Anda.

Ekstensi atau kode khusus yang menangani konten (seperti ekstensi blog) mungkin terpengaruh. Jika kode Anda menggunakan beberapa variabel atau blok konfigurasi, Anda perlu membuat skrip pembaruan data yang menambahkan variabel atau blok ke tabel daftar putih:

Bagaimana Anda membuat daftar putih variabel dan blokir?

paj
sumber

Jawaban:

38

Demi kelengkapan, Anda dapat secara manual menambahkan blok dan variabel ke daftar putih di bawah Sistem> Izin> Variabel dan Sistem> Izin> Blok . Kode yang Anda tambahkan ada di form web/unsecure/base_url(jalur config) atau rss/order_new(alias kelas blok).

Jawaban asli

Skrip upgrade saya terlihat seperti ini:

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

Ganti $blockNamesdan $variableNamesdengan Anda sendiri. Alat berikut membantu menemukan variabel dan blok bekas: https://github.com/peterjaap/magerun-addons

Memuat variabel / blokir terlebih dahulu memastikan bahwa Anda tidak mencoba untuk memasukkan duplikat (ini akan membuat skrip crash) Ini terjadi pada saya karena skrip menunjukkan kepada saya variabel "trans_email / ident_general / email" dan "trans_email / ident_support / email" yang sudah masuk daftar putih dalam rilis patch final.

Cara menggunakan skrip pemutakhiran

Tempatkan dalam modul khusus sebagai skrip pemutakhiran data (skrip pemutakhiran data dijalankan setelah skrip pemutakhiran normal, ini memastikan bahwa tabel sudah ada). Jika Anda belum memiliki modul yang Anda gunakan untuk pembaruan konfigurasi, buat seperti ini:

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

(seperti di atas)

Fabian Schmengler
sumber
1
Ini bekerja dengan baik untuk blok khusus saya. Saya tidak sepenuhnya mengerti cara kerja daftar putih variabel. Variabel dalam modul khusus saya yang ada tidak muncul dalam daftar putih, tetapi berfungsi.
paj
1
blok ditampilkan, tetapi db tidak berubah. aneh
Claudiu Creanga
hanya untuk memperjelas komentar saya di atas mengenai variabel, apakah kita berbicara tentang variabel daftar putih yang disebut dalam cms atau file lokal yaitu templat email menggunakan {config path = dan bukan variabel modul kustom yang diakses dalam PHP dengan Mage :: getStoreConfig ('my_var')? Sejauh ini alat telah menemukan blok yang tidak masuk daftar putih, tetapi tidak ada variabel.
paj

hanya {{config}}arahan yang memerlukan daftar putih. Kode ini ditujukan untuk proyek, bukan untuk ekstensi, jadi saya menganggap toko yang ditambal, tetapi ekstensi harus memeriksa versi Magento (atau lebih baik, periksa apakah tabelnya ada)
Fabian Schmengler

3
Diperbarui lagi dengan cek yang lebih baik berkat @ mam08ixo gist.github.com/mam08ixo/3937df764da7a6816a1d
Fabian Schmengler

16

Anda dapat menambahkannya secara manual di backend Magento di bawah Sistem> Izin> Variabel dan Sistem> Izin> Blok begitu Magento 1.9.2.2 diinstal.

Plugin yang menggunakan variabel khusus blok perlu menambahkan skrip pemutakhiran data dengan kode yang sama seperti yang ditunjukkan di bawah ini.

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
Ini hanya akan berfungsi untuk edisi komunitas, saya akan menambahkan tanda centang pada CE dan 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
sebagai @DmitryFurs menyatakan lebih baik Anda memeriksa apakah fitur ada dengan memilih tabel atau keberadaan bidang konfigurasi tetapi tidak pada versi
Anton S

Poin bagus, Vladimir dan Anton. Saya mencoba menggunakan ini jika ($ installer-> getConnection () -> isTableExists ($ installer-> getTable ('admin / permit_block'))) {...} tetapi menghasilkan kesalahan. Ada ide tentang cara memeriksa apakah meja ada dan tidak melakukan apa-apa jika tidak?
Solide
Saya telah memperbarui jawaban saya, Anda dapat menggunakan if (Mage :: getModel ('admin / block')) {...}
Solide
5

Anda dapat menemukan ada tabel baru setelah SUPEE-6788patch diinstal

permission_variable

permission_block

Dan Anda dapat menambahkan beberapa variabel konfigurasi atau blok ke tabel daftar putih ini.

DmitryFurs
sumber