Qu'est-ce que getBlockHtml ('formkey')?


19

J'essaie de modifier la page de modification du produit (premier onglet) dans Magento et je voudrais déplacer la quantité (ainsi que quelques autres choses) de leurs onglets respectifs jusqu'à la première page. je vois

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

et sachez que le code de la zone de texte de quantité est

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

Quelqu'un sait-il où se trouve le code du premier onglet? Cela a-t-il quelque chose à voir avec formkey?

Merci!

Réponses:


43

Les clés de formulaire dans Magento sont un moyen de prévenir la contrefaçon de demandes intersites - expliqué avec brio par Ashley Schroder ici, mais, en bref, c'est pour vous protéger des personnes qui tentent de publier sur vos formulaires (comme ajouter au panier) d'autres sites se présentant comme vous.

Cela peut être dangereux car quelqu'un pourrait théoriquement créer son propre formulaire et le publier sur n'importe quelle action de contrôleur de gestionnaire de formulaire dans votre magasin sans que vous en soyez conscient. La protection CSRF ignore essentiellement toute publication qui échoue à une vérification du paramètre form_key inclus avec la publication de formulaire.

Alors, qu'est-ce que ça <?php echo $this->getBlockHtml('formkey')?>fait? Il indique à Magento de rechercher un bloc de mise en page avec le nom "formkey" et de le générer. Dans Magento, c'est généralement un fichier qui contient ceci:

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

Cela demande à Magento de générer et de stocker une clé de formulaire unique pour une session utilisateur. Toutes les actions du contrôleur Magento protégées par CSRF le vérifieront avant de faire quoi que ce soit de valeur.

HTH!


Eh bien, cela explique certainement ce qu'ils font et je vous remercie beaucoup. Maintenant, il me reste à essayer de comprendre comment obtenir cette quantité <tr> dans le premier onglet de modification de mon produit. Pensées? Je peux le faire juste en haut, mais je veux que ce soit l'un des champs inclus, il semble donc qu'il devait être là.
new2programming

La dernière phrase me laisse me demander s'il y a des contrôleurs Magento qui ne sont pas protégés par CSRF o_O
Nick Rolando
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.