Odpowiedzi:
Klucze formularzy w Magento zapobiegają fałszowaniu żądań między witrynami , w skrócie, mają chronić Cię przed osobami, które próbują publikować w Twoich formularzach (np. Dodaj do koszyka) z innych stron udających Ciebie.
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. Ochrona CSRF zasadniczo ignoruje każdy post, który nie przejdzie sprawdzania dołączonego parametru form_key w formularzu post.
<?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 przechował unikalny klucz formularza dla sesji użytkownika. Wszystkie działania kontrolera Magento chronione przez CSRF zweryfikują to, zanim zrobią coś wartościowego.
\Magento\Framework\Data\Form\FormKey\Validator
.
Możesz dodać formkey za pomocą tego kodu:
<?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();?>">
Jeśli chcesz dodać klucz formularza do pliku phtml, użyj bezpośredniego
$ this-> getFormKey ()
<input name="form_key" type="hidden" value="<?php echo $block->getFormKey();?>">
Używanie wstrzykiwania zależności w konstruktorze klas:
protected $formKey;
public function __construct(
\Magento\Framework\Data\Form\FormKey $formKey
) {
$this->formKey = $formKey;
}
public function getFormKey()
{
return $this->formKey->getFormKey();
}
Uwaga: Nie używaj menedżera obiektów bezpośrednio w plikach phtml
ObjectManager
użycie frontendu, to nie jest dobra praktyka.
Nie ma potrzeby inicjowania menedżera obiektów i wszystko, czego możesz użyć.
window.FORM_KEY
Frontend, którego możesz użyć:
$block->getKey()
Mam nadzieję że to pomoże!
Dzięki