Як отримати ключ форми в 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 – основи їх використання.
Дякуємо, що читаєте нас!
Останні пости
Демокріт
Ми потребуємо не стільки допомоги друзів, а більше тієї впевненості, що ми її отримаємо Демокріт… Читати далі
Майк Тайсон
Коли мені важко, я завжди нагадую собі про те, що якщо я здамся — краще… Читати далі
25 корисних порад та рішень jQuery, які ви повинні знати
jQuery – це швидка і досить невелика бібліотека JavaScript. Вона спрощує створення інтерактивних та приголомшливих… Читати далі
Йоганн Вольфганг фон Гете
Кожен чує тільки те, що він розуміє Йоганн Вольфганг фон Гете Читати далі
Сайт для перукарні Teti Bond
Опис проекту: Розробка офіційного сайту для перукарні Teti Bond в місті Житомир. Перукарня орієнтована… Читати далі
Як повністю і без сліду видалити плагін у WordPress
Плагіни є невід'ємною частиною функціонування WordPress, адже за їх допомогою можна досягти практично необмеженої розширюваності… Читати далі