管理控制器中的公共操作


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模块中应该允许什么?

Answers:


4

我从未见过Magento工程师对此事的正式答复,但对我而言,似乎总是希望在用户希望能够从安全会话外部链接到页面时使用此功能,否则请单击引用安全管理员URL的链接只会在提示您登录后将您重定向到仪表板。

我始终会想到两种情况:要么希望用户能够与其他用户共享某些管理页面,要么希望某个公共页面引用Magento后端中的自定义URL(否则将仅重定向到仪表板) 。

当您查看Magento核心时,您会发现Magento实际上已经在评论,订单和产品页面上实现了这一功能。我想Magento工程师这样做是为了使商店的管理员用户能够直接通过Messenger或电子邮件发送链接(如“嘿,请检查此顺序:[url] ”)。当我希望页面可以被管理员用户轻松共享时,我曾经为页面实现了这样的功能。

基本上,将CSRF攻击的风险增加是为了能够直接链接到管理后端中的页面的自由,这仅在考虑到非常确定的用例时才可以进行。我认为CMS Pages并未纳入Magento核心团队的用例,因为他们似乎已将此“功能”限制为与客户支持和产品编辑有关的操作-这基本上是许多客户服务代表最常见的任务商店。


这是有道理的。+1如果在接下来的24小时内我没有听到团队成员的正式答复(与该答复有所不同),则复选标记是您的。
马里乌斯

0

如果我不得不猜测,那是因为秘密密钥可以用作Magento内置的CSRF和/或XSS保护的一部分。因此,对于不根据用户输入修改其内容的页面,可能不需要在其中拥有密钥。

换句话说,只有接收用户提供的数据/输入的动作才受到秘密密钥的保护。只是一个猜测。


如果是这样,那么编辑CMS页面也应该是“公开的”。因此,应编辑客户或税收规则。
马里斯(Marius)

这是一个公平的观点;TiEul的回应确实有意义。我在黑暗中挣扎,看起来像我错过了。
布雷特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.