APPSEC-1057 Cách thêm biến hoặc khối vào bảng danh sách trắng


45

APPSEC-1057 (một phần của SUPEE-6788)

Magento hiện bao gồm một danh sách trắng các khối hoặc chỉ thị được phép. Nếu một mô-đun hoặc bất kỳ ai sử dụng các biến như {{config path=”web/unsecure/base_url”}}{{block type=rss/order_new}}trong các trang hoặc email CMS và các lệnh không có trong danh sách này, bạn sẽ cần thêm chúng vào tập lệnh cài đặt cơ sở dữ liệu của mình.

Tiện ích mở rộng hoặc mã tùy chỉnh xử lý nội dung (như tiện ích mở rộng blog) có thể bị ảnh hưởng. Nếu mã của bạn sử dụng một số biến hoặc khối cấu hình, bạn cần tạo tập lệnh cập nhật dữ liệu để thêm biến hoặc khối vào bảng danh sách trắng:

Làm thế nào để bạn danh sách trắng các biến và khối tùy chỉnh?

Câu trả lời:


38

Để hoàn thiện, bạn có thể thêm các khối và biến theo cách thủ công vào danh sách trắng trong Hệ thống> Quyền> BiếnHệ thống> Quyền> Khối . Các mã bạn thêm vào có ở dạng web/unsecure/base_url(đường dẫn cấu hình) hoặc rss/order_new(bí danh lớp khối).

Câu trả lời gốc

Kịch bản nâng cấp của tôi trông như thế này:

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

Thay thế $blockNames$variableNamesbằng của riêng bạn. Công cụ sau đây giúp tìm các biến và khối được sử dụng: https://github.com/peterjaap/magerun-addons

Trước tiên, tải các biến / khối đảm bảo rằng bạn không cố gắng chèn các bản sao (điều này sẽ làm hỏng tập lệnh). Điều này đã xảy ra với tôi bởi vì tập lệnh đã hiển thị cho tôi các biến "trans_email / ID_general / email" và "trans_email / ID_support / email" đã được đưa vào danh sách trắng trong bản phát hành bản vá cuối cùng.

Cách sử dụng tập lệnh nâng cấp

Đặt nó trong một mô-đun tùy chỉnh dưới dạng tập lệnh nâng cấp dữ liệu (tập lệnh nâng cấp dữ liệu được chạy sau tập lệnh nâng cấp thông thường, điều này đảm bảo rằng các bảng đã tồn tại). Nếu bạn chưa có mô-đun nào bạn sử dụng để cập nhật cấu hình, hãy tạo mô-đun như thế này:

ứng dụng / etc / mô-đun / Project_Config.xml

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

ứng dụng / mã / cục bộ / Dự án / Cấu hình / 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

(như trên)


1
Điều này làm việc tốt cho các khối tùy chỉnh của tôi. Tôi không hiểu đầy đủ về cách hoạt động của danh sách trắng. Các biến trong các mô-đun tùy chỉnh hiện tại của tôi không xuất hiện trong danh sách trắng, nhưng đang hoạt động.
ngủ

1
các khối hiển thị, nhưng db không thay đổi. kỳ lạ
Claudiu Creanga

chỉ để làm rõ nhận xét của tôi ở trên về các biến, chúng ta đang nói về các biến danh sách trắng được gọi trong các tệp cms hoặc locale tức là các mẫu email sử dụng {config path = và không phải các biến mô-đun tùy chỉnh được truy cập trong PHP bằng Mage :: getStoreConfig ('my_var')? Cho đến nay các công cụ đã tìm thấy các khối không nằm trong danh sách trắng, nhưng không có biến.
ngủ

chỉ {{config}}cần có danh sách trắng. Mã này dành cho các dự án, không phải cho các tiện ích mở rộng, vì vậy tôi giả sử một cửa hàng được vá, nhưng các tiện ích mở rộng nên kiểm tra phiên bản Magento (hoặc tốt hơn, kiểm tra xem các bảng có tồn tại không)
Fabian Schmengler

3
Được cập nhật một lần nữa với kiểm tra đẹp hơn nhờ @ mam08ixo gist.github.com/mam08ixo/3937df764da7a6816a1d
Fabian Schmengler

16

Bạn có thể thêm chúng theo cách thủ công trong phụ trợ Magento trong Hệ thống> Quyền> BiếnHệ thống> Quyền> Chặn sau khi Magento 1.9.2.2 được cài đặt.

Các plugin sử dụng các biến tùy chỉnh của các khối sẽ cần thêm tập lệnh nâng cấp dữ liệu với mã tương tự như dưới đây.

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
Điều này sẽ chỉ hoạt động cho phiên bản cộng đồng, tôi sẽ thêm kiểm tra vào CE và 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
như @DmitryFurs đã nói ở đó, hãy kiểm tra xem tính năng có tồn tại hay không bằng cách chọn các bảng hoặc sự tồn tại của các trường cấu hình nhưng không phải trên phiên bản
Anton S

Điểm tốt Vladimir và Anton. Tôi đã thử sử dụng cái này nếu ($ Installer-> getConnection () -> isTableExists ($ Installer-> getTable ('admin / allow_block'))) {...} nhưng nó gây ra lỗi. Bất kỳ ý tưởng về cách kiểm tra dân số nếu bảng tồn tại và không làm gì nếu nó không?
Solide

Tôi đã cập nhật câu trả lời của mình, bạn có thể sử dụng if (Mage :: getModel ('admin / block')) {...}
Solide

5

Bạn có thể tìm thấy có các bảng mới sau khi SUPEE-6788bản vá đã được cài đặt

permission_variable

permission_block

Và bạn có thể thêm một số biến hoặc khối cấu hình vào các bảng danh sách trắng này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.