Загальнодоступні дії в адміністраторах-контролерах


12

Я виявив, що в класі \Magento\Backend\App\AbstractAction(родоначальник кожної дії контролера адміністратора) є член, який називається, _publicActionsякий використовується у валідації секретного ключа, як це:

 if (is_array($this->_publicActions) && in_array($this->getRequest()->getActionName(), $this->_publicActions)) {
     return true;
 }

Це означає, що якщо певне ім’я дії вказано у _publicActionsвас, ви можете отримати доступ до дії без секретного ключа в URL-адресі.
Це благо для розробки та налагодження, тому що ви можете це робити як ROOT/admin/module/controller/actionвручну, без необхідності знати секретний ключ адміністратора, але те, що я не розумію, це чому я можу отримати доступ до сторінки редагування продукту без секретного ключа.
Просто зателефонуйте на будь-яку сторінку редагування продукту, як це ROOT/admin/catalog/product/edit/id/{product_id_here}.

publicActionsЕлемент перезаписан для замовлень (які дозволяють індекс і виду), в продуктах (для редагування) і в контролері перенаправлення для перенаправлення.

Тепер моє запитання:
Чому без секретного ключа дозволені лише деякі дії редагування, і коли / що я повинен дозволити в своїх спеціальних модулях CRUD без секретного ключа?

Відповіді:


4

Я ніколи не бачив офіційної відповіді інженера Magento з цього приводу, але мені завжди здавалося, що ця функція повинна використовуватися, коли ви бажаєте, щоб користувачі могли мати посилання на сторінку поза захищеним сеансом, оскільки в іншому випадку натисніть на посилання, що посилається на захищену URL-адресу адміністратора, перенаправить вас на інформаційну панель лише після того, як запропонує вам увійти.

Я завжди мав на увазі два сценарії: або ви хочете, щоб користувачі мали змогу ділитися певними сторінками адміністратора з іншими користувачами, або ви хочете, щоб якась загальнодоступна сторінка посилалася на вашу власну URL-адресу в задній частині Magento (що в іншому випадку буде переспрямовано лише на приладну панель) .

Якщо ви подивитесь на ядро ​​Magento, то можна побачити, що Magento по суті реалізував це для оглядів, замовлень та сторінок продуктів. Я припускаю, що інженери Magento зробили це так, що користувачі адміністратора магазину можуть надсилати посилання безпосередньо через месенджер чи електронний лист (як у "Ей, перевірте це замовлення: [url] ."). Я колись реалізував подібну функцію для сторінки, коли хотів, щоб її легко поділили користувачі адміністратора.

Ви в основному торгуєте підвищеним ризиком нападу CSRF за свободу можливості прямого посилання на сторінку у вашому адміністраторі, що слід робити лише тоді, коли ви маєте на увазі дуже певний випадок використання. Я думаю, що Сторінки CMS не потрапляють у справу використання для основної команди Magento, оскільки, здавалося, обмежили цю "особливість" діями, пов'язаними з підтримкою клієнтів та редагуванням продуктів - в основному це найпоширеніші завдання для представників служби обслуговування клієнтів у багатьох магазини.


Це має сенс. +1 Якщо я не почую офіційну відповідь (відмінну від цієї) від члена команди в наступні 24 години, галочка є вашою.
Маріус

0

Якби мені довелося здогадатися, я б сказав, що секретний ключ може використовуватися як частина захисту CSRF та / або XSS, вбудованого в Magento. Отже, для сторінок, які не змінюють його вміст на основі введення користувачем, може не знадобитися там секретний ключ.

Іншим способом було сказано, що тільки дії, які отримують надані користувачем дані / введення, захищені секретним ключем. Просто здогадка.


якщо це було правдою, то редагування сторінки CMS також повинно бути "загальнодоступним". Так слід редагувати клієнта чи податкову норму.
Маріус

Це справедливий момент; і відповідь TiEul має сенс. Я в темряві брав удар, схоже, що пропустив.
Бретт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.