Я обнаружил, что в классе \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 без секретного ключа?
источник
Если бы мне пришлось делать предположения, я бы сказал, что это потому, что секретный ключ может использоваться как часть защиты CSRF и / или XSS, встроенной в Magento. Так что для страниц, которые не изменяют свое содержимое на основе пользовательского ввода, может быть необязательно иметь там секретный ключ.
Другими словами, только действия, которые получают пользовательские данные / ввод, защищены секретным ключом. Просто предположение.
источник