getBlockHtml ('formkey') คืออะไร?


19

ฉันกำลังพยายามแก้ไขหน้าแก้ไขผลิตภัณฑ์ (แท็บแรก) ใน Magento และต้องการย้ายปริมาณ (รวมถึงสิ่งอื่น ๆ ) จากแท็บที่เกี่ยวข้องจนถึงหน้าแรก ฉันเห็น

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

และรู้ว่ารหัสสำหรับช่องข้อความปริมาณคือ

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

ไม่มีใครรู้ว่ารหัสสำหรับแท็บแรกอยู่ที่ไหน มันมีบางอย่างเกี่ยวข้องกับ formkey หรือไม่?

ขอบคุณ!

คำตอบ:


43

ปุ่มแบบฟอร์มในวีโอไอพีเป็นวิธีการป้องกันการปลอมแปลงคำขอข้ามไซต์ - อธิบายอย่างชาญฉลาดโดย Ashley Schroder ที่นี่แต่ในระยะสั้นจะช่วยให้คุณปลอดภัยจากผู้ที่พยายามโพสต์ในแบบฟอร์มของคุณ (เช่นเพิ่มในตะกร้า) จากเว็บไซต์อื่น ๆ คุณ.

สิ่งนี้อาจเป็นอันตรายได้เพราะบางคนในทางทฤษฎีสามารถสร้างรูปแบบของตนเองและโพสต์ไปยังแอ็คชั่นตัวจัดการรูปแบบใดก็ได้ในร้านค้าของคุณโดยที่คุณไม่รู้ตัว การป้องกัน CSRF จะไม่สนใจการโพสต์ใด ๆ ที่ไม่ผ่านการตรวจสอบพารามิเตอร์ form_key ที่รวมอยู่กับการโพสต์แบบฟอร์ม

แล้วจะ<?php echo $this->getBlockHtml('formkey')?>ทำอย่างไรดี? มันบอกให้วีโอไอพีค้นหาบล็อกเลย์เอาต์ที่มีชื่อ "formkey" และเอาท์พุทมัน ใน Magento นี้มักจะเป็นไฟล์ที่มีอยู่ในนั้นบางส่วน:

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

สิ่งนี้สั่งให้วีโอไอพีส่งออกและเก็บคีย์ฟอร์มที่ไม่ซ้ำกันสำหรับเซสชันผู้ใช้ การกระทำของวีโอไอพีที่ได้รับการคุ้มครองโดย CSRF ทั้งหมดจะตรวจสอบกับสิ่งนี้ก่อนที่จะทำสิ่งที่มีค่า

HTH!


ดีที่แน่นอนอธิบายสิ่งที่พวกเขาทำและฉันขอบคุณมาก ตอนนี้ฉันยังคงพยายามหาวิธีที่จะทำให้ปริมาณ <tr> นั้นอยู่ในแท็บแรกของการแก้ไขผลิตภัณฑ์ของฉัน คิด? ฉันสามารถทำได้ที่ด้านบน แต่ฉันต้องการให้เป็นหนึ่งในเขตข้อมูลที่รวมไว้ดังนั้นจึงดูเหมือนว่ามันควรจะอยู่ที่นั่น
new2programming

ประโยคสุดท้ายทำให้ฉันสงสัยว่ามีตัวควบคุมMagentoบางตัวที่ไม่ได้รับการปกป้องจาก CSRF o_O
Nick Rolando
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.