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 – основи їх використання.

Дякуємо, що читаєте нас!

 

Recent Posts

Мати Тереза

Якщо молитва – це твоє звернення до Бога, то інтуїція – це розмова Бога з… Read More

17/02/2021

Особливості маркування косметики

Косметична продукція – товари, що належать до особливої ​​категорії. Упаковка повинна відповідати ряду вимог. Важливо,… Read More

16/02/2021

Основні компоненти системи розсувних дверей (купе)

Розсувні двері купе – це стильний і сучасний спосіб додати індивідуальності вашому будинку. Вони не… Read More

12/02/2021

Дивовижні місця України для відпочинку душею і тілом

Україну можна сміливо назвати не тільки однією з найстаріших країн в Європі, але і однією… Read More

05/02/2021

Покращуємо показники Core Web Vitals – основний тренд SEO в 2021 році

Раніше ми писали про те, що таке Основні веб-показники (по-англійськи Core Web Vitals) в інструменті… Read More

30/01/2021

Відповіді на найпоширеніші питання про жорсткі диски для ноутбуків

Не всі жорсткі диски однакові, і коли ви купуєте новий ноутбук, на вибір у вас… Read More

29/01/2021