답변:
Magento의 양식 키 는 Cross Site Request Forgery 를 방지하는 수단입니다 . 간단히 말해서, 다른 사이트에서 귀하의 양식에 게시하려는 사람들 (예 : 장바구니에 추가)을 안전하게 지키는 것입니다.
누군가 이론적으로 자체 양식을 작성하고 상점의 모든 양식 핸들러 제어기 조치에 게시 할 수 있기 때문에 위험 할 수 있습니다. CSRF 보호는 기본적으로 form post와 함께 포함 된 form_key 매개 변수를 검사하지 못한 모든 post를 무시합니다.
<?php echo $this->getBlockHtml('formkey')?>
Magento에게 "formkey"라는 이름의 레이아웃 블록을 찾아 출력하도록 지시합니다. 마 젠토에서 이것은 보통 이것 안에있는 파일입니다 :
<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
.
이 코드로 폼키를 추가 할 수 있습니다 :
<?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();?>">
클래스 생성자에서 Dependency Injection 사용 :
protected $formKey;
public function __construct(
\Magento\Framework\Data\Form\FormKey $formKey
) {
$this->formKey = $formKey;
}
public function getFormKey()
{
return $this->formKey->getFormKey();
}
참고 : phtml 파일에서 직접 객체 관리자를 사용하지 마십시오
ObjectManager
프론트 엔드에서 사용을 제안 하는 것은 좋은 습관이 아닙니다.
객체 관리자를 초기화 할 필요가 없으며 모두 사용할 수 있습니다.
window.FORM_KEY
사용할 수있는 프론트 엔드 :
$block->getKey()
도움이 되었기를 바랍니다!
감사