Apa itu getBlockHtml ('formkey')?

19

Saya mencoba mengedit halaman edit produk (tab pertama) di Magento dan ingin memindahkan kuantitas (serta beberapa hal lainnya) dari masing-masing tab ke halaman pertama. saya melihat

<form action="<?php echo $this->getSaveUrl() ?>" method="post" id="product_edit_form" enctype="multipart/form-data">
<?php echo $this->getBlockHtml('formkey')?>
<div style="display:none"></div>
</form>

dan tahu bahwa kode untuk kotak teks kuantitas adalah

    <tr>
        <td class="label"><label for="inventory_qty"><?php echo Mage::helper('catalog')->__('Qty') ?><span class="required">*</span></label></td>
        <td class="value">
            <?php if (!$_readonly):?>
            <input type="hidden" id="original_inventory_qty" name="<?php echo $this->getFieldSuffix() ?>[stock_data][original_inventory_qty]" value="<?php echo $this->getFieldValue('qty')*1 ?>"/>
            <?php endif;?>
            <input type="text" class="input-text required-entry validate-number" id="inventory_qty" name="<?php echo $this->getFieldSuffix() ?>[stock_data][qty]" value="<?php echo $this->getFieldValue('qty')*1 ?>" <?php echo $_readonly;?>/>
        </td>
        <td class="value scope-label"><?php echo Mage::helper('adminhtml')->__('[GLOBAL]') ?></td>
    </tr>

Adakah yang tahu di mana kode untuk tab pertama? Apakah ada hubungannya dengan formkey?

Terima kasih!

new2programming
sumber

Jawaban:

43

Kunci formulir di Magento adalah cara untuk mencegah terhadap Pemalsuan Permintaan Situs Lintas - dijelaskan dengan cemerlang oleh Ashley Schroder di sini , tetapi, singkatnya, itu membuat Anda aman dari orang-orang yang mencoba memposting ke formulir Anda (seperti menambahkan ke keranjang) dari situs lain yang menyamar sebagai kamu.

Ini bisa berbahaya karena seseorang secara teoritis dapat membuat formulir mereka sendiri dan memposting ke tindakan pengendali pengendali formulir di toko Anda tanpa Anda sadari. Perlindungan CSRF pada dasarnya mengabaikan setiap posting yang gagal memeriksa parameter form_key yang disertakan dengan form post.

Jadi, apa fungsinya <?php echo $this->getBlockHtml('formkey')?>? Ia memberitahu Magento untuk mencari blok tata letak dengan nama "formkey" dan menampilkannya. Di Magento ini biasanya beberapa file yang memiliki ini di dalamnya:

<div><input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" /></div>

Ini menginstruksikan Magento untuk mengeluarkan dan menyimpan kunci formulir unik untuk sesi pengguna. Semua tindakan pengontrol Magento yang dilindungi CSRF akan memverifikasi ini sebelum melakukan sesuatu yang bernilai.

HTH!

Philwinkle
sumber
Nah itu jelas menjelaskan apa yang mereka lakukan dan saya ucapkan terima kasih banyak. Sekarang saya masih mencoba mencari cara untuk mendapatkan kuantitas itu <tr> ke tab edit produk pertama saya. Pikiran? Saya bisa melakukannya hanya di atas tetapi saya ingin itu menjadi salah satu bidang yang disertakan sehingga sepertinya itu seharusnya ada di sana.
pemrograman baru
Kalimat terakhir membuat saya bertanya-tanya apakah ada beberapa pengendali Magento yang tidak dilindungi CSRF o_O
Nick Rolando