O que é getBlockHtml ('formkey')?

19

Estou tentando editar a página de edição do produto (primeira guia) no Magento e gostaria de mover a quantidade (bem como algumas outras coisas) de suas respectivas guias para a primeira página. eu vejo

<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 saiba que o código da caixa de texto de quantidade é

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

Alguém sabe onde está o código para a primeira guia? Isso tem algo a ver com o formkey?

Obrigado!

new2programming
fonte

Respostas:

43

As chaves de formulário no Magento são um meio de impedir a falsificação de solicitação entre sites - explicada brilhantemente por Ashley Schroder aqui , mas, em resumo, é para mantê-lo protegido contra pessoas que tentam postar em seus formulários (como adicionar ao carrinho) de outros sites que se apresentam como você.

Isso pode ser perigoso porque, teoricamente, alguém pode criar seu próprio formulário e publicar em qualquer ação do controlador de manipulador de formulários em sua loja sem que você esteja ciente. A proteção CSRF basicamente ignora qualquer publicação que falhe na verificação do parâmetro form_key incluído na publicação de formulário.

Então, o que <?php echo $this->getBlockHtml('formkey')?>faz? Ele diz ao Magento para procurar um bloco de layout com o nome "formkey" e enviá-lo. No Magento, isso geralmente é um arquivo que contém isso:

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

Isso instrui o Magento a produzir e armazenar uma chave de formulário exclusiva para uma sessão do usuário. Todas as ações do controlador Magento protegidas por CSRF serão verificadas contra isso antes de fazer algo de valor.

HTH!

philwinkle
fonte
Bem, isso certamente explica o que eles fazem e eu agradeço muito. Agora ainda estou tentando descobrir como obter essa quantidade <tr> na primeira guia de edição do produto. Pensamentos? Posso fazê-lo na parte superior, mas quero que seja um dos campos incluídos, para que pareça que deveria estar lá.
New2programming
A última frase me faz pensar se existem alguns controladores Magento que não são protegidos por CSRF o_O
Nick Rolando