Was ist getBlockHtml ('formkey')?

19

Ich versuche, die Produktbearbeitungsseite (erster Tab) in Magento zu bearbeiten und möchte die Menge (sowie einige andere Dinge) von den jeweiligen Tabs auf die erste Seite verschieben. Aha

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

und wissen, dass der Code für das Quantitätstextfeld ist

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

Weiß jemand, wo der Code für die erste Registerkarte ist? Hat es etwas mit formkey zu tun?

Vielen Dank!

new2programming
quelle

Antworten:

43

Formularschlüssel in Magento sind ein Mittel, um das Fälschen von Cross-Site-Anfragen zu verhindern. Ashley Schroder hat dies hier brillant erklärt. Kurz gesagt, sie sollen Sie vor Leuten schützen, die versuchen, auf Ihren Formularen (z. B. in den Warenkorb) von anderen Sites aus zu posten, die sich als ausgeben Sie.

Dies kann gefährlich sein, da theoretisch jemand sein eigenes Formular erstellen und auf eine beliebige Handler-Controller-Aktion in Ihrem Geschäft posten könnte, ohne dass Sie sich dessen bewusst sind. Der CSRF-Schutz ignoriert im Wesentlichen alle Posts, bei denen die Prüfung des enthaltenen Parameters form_key mit dem Formularpost fehlschlägt.

Also, was macht <?php echo $this->getBlockHtml('formkey')?>das? Magento wird angewiesen, nach einem Layoutblock mit dem Namen "formkey" zu suchen und diesen auszugeben. In Magento ist dies normalerweise eine Datei, die folgendes enthält:

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

Dies weist Magento an, einen eindeutigen Formularschlüssel für eine Benutzersitzung auszugeben und zu speichern. Alle CSRF-geschützten Magento-Controller-Aktionen werden daraufhin überprüft, bevor etwas Wertvolles getan wird.

HTH!

Philwinkle
quelle
Nun, das erklärt sicherlich, was sie tun, und ich danke Ihnen sehr. Jetzt versuche ich immer noch, herauszufinden, wie ich diese Menge <tr> in den ersten Tab "Produktbearbeitung" bekomme. Gedanken? Ich kann es nur oben machen, aber ich möchte, dass es eines der enthaltenen Felder ist, also sieht es so aus, als ob es dort sein sollte.
new2programming
Der letzte Satz lässt mich fragen, ob es einige Magento- Controller gibt, die nicht CSRF-geschützt sind. O_O
Nick Rolando