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

Что такое VPN (виртуальная частная сеть) – и как она защищает в Интернете?

Существует множество способов защитить свои данные в Интернете. Одним из лучших решений можно назвать виртуальную…

2 дня ago

Что такое прокси-сервер и нужен ли он вам?

Реалии настоящего таковы, что все труднее становится оставаться приватным при просмотре веб-страниц, и это еще…

3 дня ago

Преимущества шоу-рума IDEALDOM на Борщаговке

Шоу-рум керамогранитной плитки IDEALDOM, расположенный по адресу г.Киев, с.Петропавловская Борщаговка, ул.Озерная, 10, — это полноценный…

4 дня ago

Подробный обзор и мнение об онлайн агенте по продаже туров в Украине

Планирование отпуска в цифровую эпоху уже не требует визитов в туристические агентства. Современные онлайн-сервисы позволяют…

6 дней ago

Рекомендации по оптимизации рекламных кампаний для достижения высоких конверсий

Для каждого бизнеса рекламная кампания с высокой конверсией — это наиболее желаемый результат, которого хочется…

1 неделя ago

Сенека

Мы дошли в нашей нелепости до того, что мысль о боли мучит нас не меньше…

1 неделя ago