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 – основы их использования.

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

 

This post was last modified on 28/09/2019 15:21

Share
Tags: Magento2
Поддержи проект
Угости меня кофе

Buy Me A Coffee ☕😊💕

 

 

Последние посты

Уинстон Черчилль

Пессимист видит трудности в каждой возможности; оптимист в любых трудностях видит возможности Сэр Уинстон Леонард…

19/05/2024

Конфуций

Когда вам покажется, что цель недостижима, не изменяйте цель — изменяйте свой план действий Конфуций…

12/05/2024

Чарлз Дарвин

Выживает не самый сильный и не самый умный, а тот, кто лучше всех приспосабливается к…

11/05/2024

Что такое тег canvas в HTML5 и зачем он нужен?

Элемент <canvas> появился только в HTML5 и используется для динамического рисования графики на веб-странице с…

10/05/2024

Ден Браун

Возможно все, — для невозможного просто требуется больше времени Ден Браун  

09/05/2024

Что включает в себя очистка ноутбука?

Ноутбук – это не только удобный и функциональный гаджет, но и довольно деликатное устройство, требующее…

08/05/2024