Підступна війна росії проти України. Орієнтовні втрати ворога
(станом на 03.10.2022)
60430
осіб
265
літаків
228
гелікоптерів
2380
танків
4991
ББМ
1405
артилерія
176
ППО
338
РСЗВ
3811
машин
15
кораблі і катери
Як отримати ключ форми в Magento 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 – основи їх використання.

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

 

 

Напишіть тут свою думку/питання

Ваша пошта не публікуватиметься.