APPSEC-1057 화이트리스트 테이블에 변수 또는 블록을 추가하는 방법


45

APPSEC-1057 (SUPEE-6788의 일부) 상태

Magento는 이제 허용 된 블록 또는 지시문의 화이트리스트를 포함합니다. 모듈이나 다른 사람 이 CMS 페이지 나 이메일 {{config path=”web/unsecure/base_url”}}과 같은 변수를 사용 {{block type=rss/order_new}}하고 지시문이이 목록에 없으면 데이터베이스 설치 스크립트와 함께 추가해야합니다.

콘텐츠 (예 : 블로그 확장명)를 처리하는 확장 프로그램 또는 사용자 지정 코드가 영향을받을 수 있습니다. 코드에서 일부 구성 변수 또는 블록을 사용하는 경우 화이트리스트 테이블에 변수 또는 블록을 추가하는 데이터 업데이트 스크립트를 작성해야합니다.

맞춤 변수 및 블록을 어떻게 허용합니까?

답변:


38

완전성을 위해 시스템> 권한> 변수시스템> 권한> 블록 아래의 화이트리스트에 블록 및 변수를 수동으로 추가 할 수 있습니다 . 여기에 추가 한 코드는 web/unsecure/base_url(config path) 또는 rss/order_new(block class alias) 형식입니다.

원래 답변

내 업그레이드 스크립트는 다음과 같습니다.

/*
 * 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 / 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

(위와 같이)


1
이것은 내 사용자 지정 블록에 효과적이었습니다. 변수 화이트리스트가 어떻게 작동하는지 완전히 이해하지 못합니다. 기존 사용자 정의 모듈의 변수가 화이트리스트에 나타나지 않지만 작동합니다.
paj

1
블록이 표시되지만 db는 변경되지 않습니다. 이상한
Claudiu Creanga

변수에 관한 위의 의견을 명확히하기 위해 cms 또는 로케일 파일에서 호출 된 변수를 허용하는 것에 대해 이야기하고 있습니까? 즉, Mage :: getStoreConfig ( 'my_var')를 사용하여 PHP에서 액세스하는 사용자 정의 모듈 변수가 아닌 {config path =를 사용하는 이메일 템플릿? 지금까지 도구는 허용 목록에 없지만 변수는없는 블록을 발견했습니다.
paj

{{config}}지시문 만 허용 목록이 필요합니다. 이 코드는 확장 프로그램이 아닌 프로젝트 용이므로 패치 된 상점을 가정하지만 확장 프로그램은 마 젠토 버전을 확인해야합니다 (또는 테이블이 존재하는지 확인하는 것이 좋습니다)
Fabian Schmengler


16

Magento 1.9.2.2가 설치되면 시스템> 권한> 변수시스템> 권한> 블록 아래의 Magento 백엔드에서 수동으로 추가 할 수 있습니다 .

블록의 사용자 정의 변수를 사용하는 플러그인은 아래와 같이 코드가있는 데이터 업그레이드 스크립트를 추가해야합니다.

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 ','> = ')) {
Vladimir Kerkhoff

1
@DmitryFurs이 명시된 바와 같이 더 잘 체크 할 기능에 해당하는 경우를 테이블이나 구성 필드의 실존을 checing가 아닌 버전
안톤 S

좋은 점 블라디미르와 안톤. ($ installer-> getConnection ()-> isTableExists ($ installer-> getTable ( 'admin / permission_block'))) {...} 인 경우 이것을 사용하려고 시도했지만 오류가 발생했습니다. 테이블이 있는지 확인하고 테이블이 없으면 아무것도하지 않는 방법에 대한 아이디어가 있습니까?
Solide

내 대답을 업데이트했습니다. if (Mage :: getModel ( 'admin / block')) {...}
Solide

5

SUPEE-6788패치가 설치된 후 새로운 테이블이 있음을 알 수 있습니다

permission_variable

permission_block

또한 이러한 화이트리스트 테이블에 구성 변수 또는 블록을 추가 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.