什么是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有关吗?

谢谢!

Answers:


43

Magento中的表单密钥是防止跨站点请求伪造的一种方法-Ashley Schroder在此进行了精彩的解释,但总而言之,这是为了确保您免受试图冒充其他站点向您发布表单(例如添加到购物车)的人们的伤害。您。

这很危险,因为理论上有人可以创建自己的表单并将其发布到商店中的任何表单处理程序控制器操作,而您甚至不会意识到。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 2014年

最后一句话让我想知道是否有一些不受CSRF保护的o_O的Magento控制器
Nick Rolando
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.