Antworten:
Formularschlüssel in Magento sind ein Mittel gegen Cross Site Request Forgery , kurz gesagt, um Sie vor Leuten zu schützen, die versuchen, auf Ihren Formularen (z. B. in den Warenkorb) von anderen Sites aus zu posten, die sich als Sie ausgeben.
Dies kann gefährlich sein, da theoretisch jemand sein eigenes Formular erstellen und auf einer beliebigen Handler-Controller-Aktion in Ihrem Geschäft posten könnte. Der CSRF-Schutz ignoriert im Wesentlichen alle Posts, bei denen die Prüfung des enthaltenen form_key-Parameters mit dem Formularpost fehlschlägt.
<?php echo $this->getBlockHtml('formkey')?>
Magento wird angewiesen, nach einem Layoutblock mit dem Namen "formkey" zu suchen und diesen auszugeben. In Magento ist dies normalerweise eine Datei, die folgendes enthält:
<div><input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" /></div>
Dies weist Magento an, einen eindeutigen Formularschlüssel für eine Benutzersitzung auszugeben und zu speichern. Alle CSRF-geschützten Magento-Controller-Aktionen werden daraufhin überprüft, bevor etwas Wertvolles getan wird.
\Magento\Framework\Data\Form\FormKey\Validator
.
Mit diesem Code können Sie einen Formularschlüssel hinzufügen:
<?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();?>">
Wenn Sie einen Formularschlüssel in eine HTML-Datei einfügen möchten, verwenden Sie direct
$ this-> getFormKey ()
<input name="form_key" type="hidden" value="<?php echo $block->getFormKey();?>">
Verwenden von Dependency Injection in Ihrem Klassenkonstruktor:
protected $formKey;
public function __construct(
\Magento\Framework\Data\Form\FormKey $formKey
) {
$this->formKey = $formKey;
}
public function getFormKey()
{
return $this->formKey->getFormKey();
}
Hinweis: Verwenden Sie den Objektmanager nicht direkt in HTML-Dateien
ObjectManager
Verwendung im Frontend vorzuschlagen. Dies ist keine gute Praxis.
Es ist nicht erforderlich, den Objekt-Manager zu initialisieren, und Sie können alles verwenden.
window.FORM_KEY
Frontend, das Sie verwenden können:
$block->getKey()
Hoffe das hilft!
Vielen Dank