GetBlockHtml ('formkey') là gì?


19

Tôi đang cố gắng chỉnh sửa trang chỉnh sửa sản phẩm (tab đầu tiên) trong Magento và muốn chuyển số lượng (cũng như một vài thứ khác) từ các tab tương ứng của chúng lên trang đầu tiên. tôi hiểu rồi

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

và biết rằng mã cho hộp văn bản số lượng là

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

Có ai biết mã cho tab đầu tiên ở đâu không? Nó có liên quan gì đến formkey không?

Cảm ơn!

Câu trả lời:


43

Khóa biểu mẫu trong Magento là một biện pháp ngăn chặn việc giả mạo yêu cầu trang web chéo - được giải thích tuyệt vời bởi Ashley Schroder tại đây , nhưng nói ngắn gọn, nó giúp bạn an toàn trước những người cố gắng đăng lên biểu mẫu của bạn (như thêm vào giỏ hàng) từ các trang web khác đặt ra bạn.

Điều này có thể nguy hiểm vì về mặt lý thuyết ai đó có thể tạo biểu mẫu của riêng họ và đăng lên bất kỳ hành động điều khiển trình xử lý biểu mẫu nào trong cửa hàng của bạn mà bạn không hề hay biết. Bảo vệ CSRF về cơ bản bỏ qua bất kỳ bài đăng nào không kiểm tra tham số form_key kèm theo với bài đăng mẫu.

Vậy, <?php echo $this->getBlockHtml('formkey')?>làm gì? Nó bảo Magento tìm kiếm một khối bố cục có tên "formkey" và xuất nó. Trong Magento, đây thường là một số tệp có trong đó:

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

Điều này hướng dẫn Magento xuất và lưu trữ khóa biểu mẫu duy nhất cho phiên người dùng. Tất cả các hành động của bộ điều khiển Magento được CSRF bảo vệ sẽ xác minh chống lại điều này trước khi làm bất cứ điều gì có giá trị.

HTH!


Vâng, điều đó chắc chắn giải thích những gì họ làm và tôi cảm ơn bạn rất nhiều. Bây giờ tôi vẫn đang cố gắng tìm ra cách đưa số lượng <tr> đó vào tab chỉnh sửa sản phẩm đầu tiên của mình. Suy nghĩ? Tôi có thể làm điều đó chỉ ở trên cùng nhưng tôi muốn nó là một trong những lĩnh vực được bao gồm để có vẻ như nó được cho là ở đó.
lập trình mới

Câu cuối cùng khiến tôi tự hỏi liệu có một số bộ điều khiển Magento không được CSRF bảo vệ o_O
Nick Rolando
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.