Categories: Мадженто 2

Как получить ключ формы в Magento 2

Ключ формы в Magento 2 используется в качестве средства защиты от подделки межсайтовых запросов (CSRF – Cross-site request forgery).

Что такое межсайтовая подделка запроса? Когда вы перемещаетесь по веб-странице, ваш браузер делает запросы к удаленному серверу для получения контента и/или манипулирования данными, хранящимися на сервере. Ваш браузер будет отправлять GET запросы для чтения информации и POST или PUT запросы при создании или обновлении информации. GET запросы происходят, например, когда ваш браузер запрашивает такие ресурсы, как картинки, CSS и JavaScript файлы. POST-запрос чаще всего возникает, когда вы отправляете форму из веб-браузера. Хакеры в основном заинтересованы в подделке вот этих POST-запросов. Это и есть межсайтовая подделка запроса. Злоумышленник заставляете браузер делать запросы на сайте от имени аутентифицированного пользователя и без его ведома.

А способы защиты от таких атак заключаются в том, чтобы проверять клиента, который делает запросы. Вот почему мы авторизуемся на сайтах. После авторизации мы получаем специальный токен (cookie), с помощью которого мы идентифицируемся на сервере, который предоставил нам этот токен. Cookie – это ключ, с помощью которого мы доказываем серверу, кто мы есть. А для защиты форм в основном используется специальный уникальный ключ, который присваивается каждому отдельному клиенту на сайте. В Magento 2 для защиты форм используется ключ формы, который присваивается каждому отдельному пользовательскому сеансу.

В сегодняшней статье мы рассмотрим на практике вопрос добавления для любой формы на сайте уникального ключа пользовательского сеанса. Все действия контроллера Magento 2, с целью защиты от CSRF, потом проверяют этот ключ, прежде чем сделать что-либо важное.

 

 

Получение и вывод ключа формы в Magento 2

Чтобы получить уникальный ключ для формы, вам нужно использовать класс \Magento\Framework\Data\Form\FormKey в качестве зависимости в вашем Блоке. А потом получить этот ключ для формы с помощью метода getFormKey().

Вот как это выглядит на практике:

<?php
namespace {VENDOR}\{Module}\Block;
use \Magento\Framework\View\Element\Template;
use \Magento\Framework\View\Element\Template\Context;
use \Magento\Framework\Data\Form\FormKey;
class MyBlock extends Template {
 protected $formKey;
 public function __construct(FormKey $formKey, Context $context, array $data = [])
 {
  $this->formKey = $formKey;
  parent::__construct($context, $data);
 }
 public function getFormKey()
 {
  return $this->formKey->getFormKey();
 }
}

 

 

После этого вы можете использовать этот метод в своем шаблоне, например, так:

<?php /** @var $block {VENDOR}\{Module}\Block\MyBlock */ ?>
<form action="/myform" method="post">
  <input type="hidden" name="form_key" value="<?php echo $block->getFormKey(); ?>" />
  <!-- ... остальная часть формы ... -->
</form>

 

 

Замените {VENDOR}\{Module} на свое пространство имен и свое название модуля.

В результате это приведет к созданию скрытого текстового поля input с ключом формы вида:

<input type="hidden" name="form_key" value="a7yRSvrxnQr5B62o">

 

 

 

Вот и все!

Если вы не знаете, как работает добавление классов в качестве зависимостей, ознакомьтесь с нашей предыдущей статьей: Инъекции зависимостей в Magento 2 – основы их использования.

Спасибо, что читаете нас!

 

Share
Published by
SebWeo
Tags: Magento2

Recent Posts

Уроки JavaScript — Краткие функции на замену большому объемному коду

Довольно часто у программистов возникает соблазн написать какую-нибудь обширную функцию, которая должна решать определенную задачу.…

4 дня ago

Зачем и как просыпаться раньше

Дискуссии вокруг этой темы вас, вероятно, уже утомили. Но я в данной статье постараюсь показать…

5 дней ago

Уроки JavaScript — Шпаргалка для разработчиков по работе с консолью в браузере

Консоль браузера (также известная как консоль JavaScript или веб-консоль) — это мощный инструмент для разработчиков,…

6 дней ago

Бернард Шоу

Никогда не указывайте на ошибки, если не знаете, как их исправить Джордж Бернард Шоу  

1 неделя ago

Уильям Джеймс

Когда необходимо сделать выбор, а вы его не делаете, — это тоже выбор Уильям Джеймс…

1 неделя ago

Практическое внедрение методик достижения целей SMART (5 примеров)

Когда вы ставите перед собой цели, очень важно быть максимально конкретным. Здесь не поможет простая…

1 неделя ago