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 / etc / โมดูล / Project_Config.xml

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

app / รหัส / ท้องถิ่น / โครงการ / 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 / รหัส / ท้องถิ่น / โครงการ / config / ข้อมูล / project_config / ข้อมูลการติดตั้ง 0.1.0.php

(ดังกล่าวข้างต้น)


1
สิ่งนี้ทำงานได้ดีสำหรับบล็อกที่กำหนดเองของฉัน ฉันไม่เข้าใจวิธีการทำงานของรายการที่อนุญาตของตัวแปร ตัวแปรในโมดูลที่กำหนดเองที่มีอยู่ของฉันไม่ปรากฏในรายการที่อนุญาต แต่กำลังทำงาน
ชุดนอน

1
บล็อกแสดง แต่ db ไม่เปลี่ยนแปลง แปลก
Claudiu Creanga

เพื่อชี้แจงความคิดเห็นของฉันข้างต้นเกี่ยวกับตัวแปรเรากำลังพูดถึงตัวแปรที่อยู่ในรายการที่อนุญาตในหน่วย cms หรือ locale เช่นแม่แบบอีเมลโดยใช้ {config path = และไม่ใช่ตัวแปรโมดูลแบบกำหนดเองที่เข้าถึงใน PHP ด้วย Mage :: getStoreConfig ('my_var') จนถึงตอนนี้เครื่องมือได้พบบล็อกที่ไม่ได้อยู่ในรายการที่อนุญาต แต่ไม่มีตัวแปร
paj

{{config}}คำสั่งเท่านั้นต้องได้รับการยกเว้น รหัสนี้มีไว้สำหรับโครงการไม่ใช่ส่วนขยายดังนั้นฉันถือว่าเป็นร้านที่มีการปะแก้ แต่ส่วนขยายควรตรวจสอบเวอร์ชั่นของวีโอไอพี (หรือดีกว่าตรวจสอบว่ามีตารางอยู่หรือไม่)
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: ถ้า ((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 ระบุไว้ว่าให้ทำการตรวจสอบของคุณว่ามีฟีเจอร์อยู่หรือไม่โดยตรวจสอบตารางหรือการมีอยู่ของฟิลด์การกำหนดค่า แต่ไม่ใช่ในเวอร์ชัน
Anton S

จุดที่ดี Vladimir และ Anton ฉันลองใช้สิ่งนี้หาก ($ installer-> getConnection () -> isTableExists ($ installer-> getTable ('admin / permission_block'))) {... } แต่มันทำให้เกิดข้อผิดพลาด มีความคิดเกี่ยวกับวิธีตรวจสอบอย่างถี่ถ้วนว่าตารางนั้นมีอยู่หรือไม่และไม่ทำอะไรเลยถ้าไม่มี
Solide

ฉันได้อัปเดตคำตอบแล้วคุณสามารถใช้หาก (Mage :: getModel ('admin / block')) {... }
Solide

5

คุณจะพบว่ามีตารางใหม่หลังจากSUPEE-6788ติดตั้งชุดข้อมูลแก้ไขแล้ว

permission_variable

permission_block

และคุณสามารถเพิ่มตัวแปรหรือบล็อกการกำหนดค่าบางอย่างลงในตารางรายการที่อนุญาต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.