DEBUG (7): Masalah keamanan: block_name belum masuk daftar putih. (Magento system.log)


22

Dalam system.logfile instalasi Magento saya, saya memiliki pesan kesalahan berikut

DEBUG (7): Masalah keamanan: block_namebelum masuk daftar putih.

di mana block_namenama blok yang digunakan di toko saya.

Apa maksudnya dan bagaimana cara memperbaikinya?

Jawaban:


28

Pesan ini berarti bahwa salah satu blok yang digunakan di toko Magento Anda tidak ada di daftar putih.

Dengan Security Patch SUPEE-6788 dan Magento CE 1.9.2.2 daftar putih baru untuk blok diperkenalkan. Magento sekarang menyertakan daftar putih blok atau arahan yang diizinkan. Jika modul atau ekstensi 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 database Anda. Jika sebuah blok tidak ada di daftar putih itu tidak akan diberikan.

Kesalahan

Pada Patch Keamanan SUPEE-7405 dan Magento CE 1.9.2.3 ada fitur inti baru yang akan dengan mudah mengidentifikasi blok yang hilang dari daftar putih untuk Anda. The blockDirective($construction)fungsi dalam

app/code/core/Mage/Core/Model/Email/Template/Filter.php

telah diperbarui dan sekarang terlihat seperti ini:

/**
 * Retrieve Block html directive
 *
 * @param array $construction
 * @return string
 */
public function blockDirective($construction)
{
    $skipParams = array('type', 'id', 'output');
    $blockParameters = $this->_getIncludeParameters($construction[2]);
    $layout = Mage::app()->getLayout();
    $block = null;

    if (isset($blockParameters['type'])) {
        if ($this->_permissionBlock->isTypeAllowed($blockParameters['type'])) {
            $type = $blockParameters['type'];
            $block = $layout->createBlock($type, null, $blockParameters);
        } else {
            Mage::log('Security problem: ' . $blockParameters['type'] . ' has not been whitelisted.');
        }
    } elseif (isset($blockParameters['id'])) {
        $block = $layout->createBlock('cms/block');
        if ($block) {
            $block->setBlockId($blockParameters['id']);
        }
    }

    if ($block) {
        $block->setBlockParams($blockParameters);
        foreach ($blockParameters as $k => $v) {
            if (in_array($k, $skipParams)) {
                continue;
            }
            $block->setDataUsingMethod($k, $v);
        }
    } else {
        return '';
    }

    if (isset($blockParameters['output'])) {
        $method = $blockParameters['output'];
    }
    if (!isset($method) || !is_string($method) || !method_exists($block, $method)) {
        $method = 'toHtml';
    }
    return $block->$method();
}

Perhatikan yang baru

Mage::log('Security problem: ' . $blockParameters['type'] . ' has not been whitelisted.');

Jika ada blok yang hilang dari daftar putih maka sistem akan mendeteksinya dan mencetak kesalahan termasuk nama blok yang hilang dalam system.logfile yang terletak di

[your magento install dir]/var/log/

Tentu saja Anda harus mengaktifkan pencatatan untuk mendapatkan pesan ini. Ini adalah kesalahan yang akan Anda lihat

DEBUG (7): Masalah keamanan: block_namebelum masuk daftar putih.

Bagaimana cara memperbaiki

Untuk memperbaikinya, Anda harus secara manual menambahkan nama blok yang hilang ke daftar putih. Hanya tambahkan blok yang Anda percayai. Jika Anda tidak tahu dari mana blok itu berasal maka cari tahu dulu. Setelah Anda yakin ingin menambahkan blok yang hilang, lalu di Panel Admin Magento, buka

System > Permissions > Blocks

dan klik Add New Blocktombolnya. Dari sini Anda dapat menambahkan blok yang hilang ke daftar putih. Cukup masukkan block_nameyang muncul di pesan kesalahan Anda di Block Name *bidang, setel Is Allowedke "Ya" dan tekan Save Blocktombol.

Jangan lupa flush cache. Blok Anda yang hilang sekarang diizinkan dan kesalahannya harus hilang.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.