Che cos'è getBlockHtml ('formkey')?


19

Sto cercando di modificare la pagina di modifica del prodotto (prima scheda) in Magento e vorrei spostare la quantità (così come alcune altre cose) dalle rispettive schede alla prima pagina. Vedo

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

e sapere che il codice per la casella di testo quantità è

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

Qualcuno sa dove si trova il codice per la prima scheda? Ha qualcosa a che fare con formkey?

Grazie!

Risposte:


43

Le chiavi dei moduli in Magento sono un mezzo per prevenire la falsificazione delle richieste di Cross Site - spiegate brillantemente da Ashley Schroder qui ma, in breve, è per proteggerti dalle persone che cercano di pubblicare nei tuoi moduli (come aggiungere al carrello) da altri siti in posa come voi.

Ciò può essere pericoloso perché in teoria qualcuno potrebbe creare il proprio modulo e pubblicarlo in qualsiasi azione del controller del gestore di moduli nel tuo negozio senza che tu ne sia a conoscenza. La protezione CSRF essenzialmente ignora qualsiasi post che non supera un controllo sul parametro form_key incluso con il post del modulo.

Quindi cosa fa <?php echo $this->getBlockHtml('formkey')?>? Indica a Magento di cercare un blocco di layout con il nome "formkey" e di produrlo. In Magento questo è di solito un file che contiene questo:

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

Questo indica a Magento di produrre e memorizzare una chiave di modulo univoca per una sessione utente. Tutte le azioni del controller Magento protette da CSRF verificheranno contro questo prima di fare qualcosa di valore.

HTH!


Beh, questo certamente spiega cosa fanno e ti ringrazio molto. Ora sono ancora a cercare di capire come inserire quella quantità <tr> nella prima scheda di modifica del mio prodotto. Pensieri? Posso farlo solo in alto ma voglio che sia uno dei campi inclusi, quindi sembra che dovrebbe essere lì.
new2programming

L'ultima frase mi lascia chiedermi se ci sono alcuni controller Magento che non sono protetti da CSRF o_O
Nick Rolando il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.