J'ai découvert que dans la classe \Magento\Backend\App\AbstractAction
(l'ancêtre de chaque action de contrôleur d'administration) il y a un membre appelé _publicActions
qui est utilisé dans la validation de la clé secrète comme ceci:
if (is_array($this->_publicActions) && in_array($this->getRequest()->getActionName(), $this->_publicActions)) {
return true;
}
Cela signifie que si un certain nom d'action est répertorié dans, _publicActions
vous pouvez accéder à l'action sans la clé secrète dans l'url.
C'est une bénédiction pour le développement et le débogage, car vous pouvez simplement le faire ROOT/admin/module/controller/action
manuellement, sans avoir besoin de connaître la clé d'administration secrète, mais ce que je ne comprends pas, c'est pourquoi puis-je accéder à la page d'édition du produit sans la clé secrète.
Appelez simplement n'importe quelle page d'édition de produit comme celle-ci ROOT/admin/catalog/product/edit/id/{product_id_here}
.
Le publicActions
membre est écrasé pour les commandes (qui permettent l'index et la vue), dans les produits (pour l'édition) et dans le contrôleur de redirection pour les redirections.
Maintenant ma question:
pourquoi seules certaines actions de modification sont autorisées sans la clé secrète, et quand / que dois-je autoriser dans mes modules CRUD personnalisés sans la clé secrète?
la source
Si je devais deviner, je dirais que c'est parce que la clé secrète peut être utilisée dans le cadre de la protection CSRF et / ou XSS intégrée à Magento. Ainsi, pour les pages qui ne modifient pas son contenu en fonction des entrées de l'utilisateur, il peut ne pas être nécessaire d'y avoir la clé secrète.
Autrement dit, seules les actions qui reçoivent des données / entrées fournies par l'utilisateur sont protégées par une clé secrète. Juste une supposition.
la source