Що таке getBlockHtml ('formkey')?


19

Я намагаюся відредагувати сторінку редагування продукту (перша вкладка) в Magento і хотів би перемістити кількість (як і кілька інших речей) з відповідних вкладок до першої сторінки. я бачу

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

і знайте, що код для текстового поля кількості

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

Хтось знає, де знаходиться код для першої вкладки? Чи має це щось спільне з formkey?

Спасибі!

Відповіді:


43

Клавіші форми в Magento - це засіб запобігання підробці підписів на веб-сайті - блискуче пояснила Ешлі Шродер, але, коротше кажучи, це захистить вас від людей, які намагаються розміщувати ваші форми (наприклад, додавати в кошик) з інших сайтів ти.

Це може бути небезпечно, оскільки хтось теоретично може створити власну форму та опублікувати будь-яку дію контролера обробника форми у вашому магазині, навіть якщо ви навіть не знаєте про це. Захист CSRF по суті ігнорує будь-яку публікацію, яка не може перевірити включений параметр form_key з повідомленням форми.

Отже, що робить <?php echo $this->getBlockHtml('formkey')?>? Він каже Magento шукати блок макета з назвою "formkey" і виводити його. У Magento це, як правило, якийсь файл, який має в ньому:

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

Це вказує Magento виводити та зберігати унікальний ключ форми для сеансу користувача. Усі дії, захищені CSRF контролером Magento, перевірятимуть це, перш ніж робити щось важливе.

HTH!


Ну, це, безумовно, пояснює те, що вони роблять, і я вам дуже дякую. Тепер я все ще намагаюся зрозуміти, як отримати цю кількість <tr> у першу вкладку редагування продукту. Думки? Я можу це зробити лише вгорі, але я хочу, щоб це було одне з включених полів, щоб було схоже, що воно повинно бути там.
new2programming

Останнє речення залишає мене цікавити, чи є деякі контролери Magento , які не захищені CSRF o_O
Нік Роландо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.