回答:
Magentoのフォームキーは、クロスサイトリクエストフォージェリを防止する手段です。要するに、あなたになりすましている他のサイトからフォーム(カートに追加するなど)に投稿しようとする人々からあなたを守るためです。
誰かが理論的に独自のフォームを作成し、ストア内のフォームハンドラーコントローラーアクションに投稿できるため、これは危険な場合があります。CSRF保護は、フォームポストに含まれるform_keyパラメーターのチェックに失敗したポストを本質的に無視します。
<?php echo $this->getBlockHtml('formkey')?>
Magentoに、「formkey」という名前のレイアウトブロックを探して出力するように指示します。Magentoでは、これは通常これを含むファイルです:
<div><input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" /></div>
これにより、Magentoはユーザーセッションの一意のフォームキーを出力および保存します。CSRFで保護されたすべてのMagentoコントローラーアクションは、価値のあることを行う前にこれに対して検証します。
\Magento\Framework\Data\Form\FormKey\Validator
。
次のコードでformkeyを追加できます。
<?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();?>">
phtmlファイルにフォームキーを追加する場合は、directを使用します
$ this-> getFormKey()
<input name="form_key" type="hidden" value="<?php echo $block->getFormKey();?>">
クラスコンストラクターでの依存性注入の使用:
protected $formKey;
public function __construct(
\Magento\Framework\Data\Form\FormKey $formKey
) {
$this->formKey = $formKey;
}
public function getFormKey()
{
return $this->formKey->getFormKey();
}
注:phtmlファイルでオブジェクトマネージャーを直接使用しないでください
ObjectManager
フロントエンドでの使用を提案するのはやめましょう。これは良い習慣ではありません。