Co to jest getBlockHtml („formkey”)?

19

Próbuję edytować stronę edycji produktu (pierwsza karta) w Magento i chciałbym przenieść ilość (jak również kilka innych rzeczy) z odpowiednich kart na pierwszą stronę. Widzę

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

i wiedz, że kod pola tekstowego ilości to

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

Czy ktoś wie, gdzie jest kod pierwszej karty? Czy to ma coś wspólnego z formkey?

Dzięki!

new2programming
źródło

Odpowiedzi:

43

Klucze formularzy w Magento są sposobem na zapobieganie fałszowaniu żądań krzyżowych - wyjaśnione tutaj doskonale przez Ashley Schroder, ale w skrócie, ma to zapewnić bezpieczeństwo przed osobami próbującymi publikować w formularzach (np. Dodaj do koszyka) z innych stron udających ty.

Może to być niebezpieczne, ponieważ ktoś może teoretycznie stworzyć własną formę i opublikować dowolną akcję kontrolera modułu obsługi formularzy w twoim sklepie, nawet o tym nie wiedząc. Ochrona CSRF zasadniczo ignoruje każdy post, który nie przejdzie kontroli załączonego parametru form_key w formularzu post.

Co więc robi <?php echo $this->getBlockHtml('formkey')?>? Mówi Magento, aby szukał bloku układu o nazwie „formkey” i wyprowadził go. W Magento jest to zwykle jakiś plik, który ma to w sobie:

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

To instruuje Magento, aby wyprowadził i zapisał unikalny klucz formularza dla sesji użytkownika. Wszystkie działania kontrolera Magento chronione przez CSRF zweryfikują to, zanim zrobią coś wartościowego.

HTH!

philwinkle
źródło
Cóż, to z pewnością wyjaśnia, co robią i bardzo dziękuję. Teraz wciąż próbuję wymyślić, jak wprowadzić tę ilość <tr> do pierwszej karty edycji produktu. Myśli? Mogę to zrobić tylko u góry, ale chcę, aby było to jedno z dołączonych pól, więc wygląda na to, że powinno tam być.
new2programming
Ostatnie zdanie pozwala mi się zastanawiać, czy istnieją kontrolery Magento , które nie są chronione przez CSRF o_O
Nick Rolando