Jawaban:
Kunci formulir di Magento adalah cara untuk mencegah terhadap Pemalsuan Permintaan Situs Lintas , singkatnya, itu membuat Anda aman dari orang-orang yang mencoba memposting ke formulir Anda (seperti menambahkan ke keranjang) dari situs lain yang menyamar sebagai Anda.
Ini bisa berbahaya karena seseorang secara teoritis bisa membuat formulir sendiri dan memposting ke tindakan pengendali penangan formulir di toko Anda. Perlindungan CSRF pada dasarnya mengabaikan posting yang gagal memeriksa parameter form_key yang disertakan dengan postingan form.
<?php echo $this->getBlockHtml('formkey')?>
Ia memberitahu Magento untuk mencari blok tata letak dengan nama "formkey" dan menampilkannya. Di Magento ini biasanya beberapa file yang memiliki ini di dalamnya:
<div><input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" /></div>
Ini menginstruksikan Magento untuk mengeluarkan dan menyimpan kunci formulir unik untuk sesi pengguna. Semua tindakan pengontrol Magento yang dilindungi CSRF akan memverifikasi ini sebelum melakukan sesuatu yang bernilai.
\Magento\Framework\Data\Form\FormKey\Validator
.
Anda dapat menambahkan formkey dengan kode ini:
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$FormKey = $objectManager->get('Magento\Framework\Data\Form\FormKey');
?>
//Hidden form key field after <form> tag
<input name="form_key" type="hidden" value="<?php echo $FormKey->getFormKey();?>">
Jika Anda ingin menambahkan kunci formulir dalam file phtml, gunakan langsung
$ this-> getFormKey ()
<input name="form_key" type="hidden" value="<?php echo $block->getFormKey();?>">
Menggunakan Injeksi Ketergantungan pada konstruktor kelas Anda:
protected $formKey;
public function __construct(
\Magento\Framework\Data\Form\FormKey $formKey
) {
$this->formKey = $formKey;
}
public function getFormKey()
{
return $this->formKey->getFormKey();
}
Catatan: Jangan gunakan manajer objek secara langsung dalam file phtml
ObjectManager
penggunaan di frontend ini bukan praktik yang baik.
Tidak perlu menginisialisasi objek manager dan semuanya, Anda dapat menggunakan.
window.FORM_KEY
Frontend dapat Anda gunakan:
$block->getKey()
Semoga ini membantu!
Terima kasih