Actions publiques dans les contrôleurs d'administration


12

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é _publicActionsqui 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, _publicActionsvous 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/actionmanuellement, 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 publicActionsmembre 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?

Réponses:


4

Je n'ai jamais vu de réponse officielle d'un ingénieur de Magento à ce sujet, mais pour moi, il est toujours apparu que cette fonctionnalité doit être utilisée lorsque vous souhaitez que les utilisateurs puissent se connecter à une page en dehors d'une session sécurisée, sinon en cliquant sur un lien référençant une URL d'administration sécurisée ne vous redirigera vers le tableau de bord qu'après vous être invité à vous connecter.

J'ai toujours eu deux scénarios en tête: soit vous voulez que les utilisateurs puissent partager certaines pages d'administration avec d'autres utilisateurs, soit vous voulez qu'une page publique fasse référence à votre URL personnalisée dans le back-end Magento (qui autrement ne redirigerait que vers le tableau de bord) .

Lorsque vous regardez le noyau Magento, vous pouvez voir que Magento l'a essentiellement mis en œuvre pour les avis, les commandes et les pages de produits. Je suppose que les ingénieurs de Magento ont fait cela pour que les utilisateurs administrateurs d'un magasin puissent envoyer des liens directement via un messager ou un e-mail (comme dans "Hé, consultez cet ordre: [url] ."). J'ai déjà implémenté une fonctionnalité comme celle-ci pour une page lorsque je voulais qu'elle soit facilement partageable par les utilisateurs administrateurs.

Vous échangez essentiellement le risque accru d'une attaque CSRF pour la liberté de pouvoir directement créer un lien vers une page dans votre back-end administrateur, ce qui ne devrait être fait que lorsque vous avez un cas d'utilisation très précis en tête. Je suppose que les pages CMS ne sont pas tombées dans le cas d'utilisation de l'équipe principale de Magento car elles semblaient avoir limité cette "fonctionnalité" aux actions liées au support client et à la modification des produits - essentiellement les tâches les plus courantes pour les représentants du service client. magasins.


C'est logique. +1 Si je n'entends pas de réponse officielle (différente de celle-ci) d'un membre de l'équipe dans les prochaines 24h, la coche est la vôtre.
Marius

0

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.


si c'était vrai, la modification d'une page CMS devrait également être "publique". Il en va de même pour la modification d'un client ou d'une règle fiscale.
Marius

C'est un bon point; et la réponse de TiEul est logique. Je prenais un coup de couteau dans le noir, on dirait que j'ai raté.
Brett
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.