Öffentliche Aktionen in Admin-Controllern

11

Ich habe festgestellt, dass in der Klasse \Magento\Backend\App\AbstractAction(dem Vorfahren jeder Admin-Controller-Aktion) ein Mitglied namens aufgerufen _publicActionswird, das bei der Validierung des geheimen Schlüssels wie folgt verwendet wird:

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

Dies bedeutet, dass Sie, wenn ein bestimmter Aktionsname in aufgeführt _publicActionsist, ohne den geheimen Schlüssel in der URL auf die Aktion zugreifen können.
Dies ist ein Segen für die Entwicklung und das Debuggen, da Sie dies einfach ROOT/admin/module/controller/actionmanuell tun können , ohne den geheimen Administratorschlüssel kennen zu müssen. Ich verstehe jedoch nicht, warum ich ohne den geheimen Schlüssel auf die Produktbearbeitungsseite zugreifen kann.
Rufen Sie einfach eine Produktbearbeitungsseite wie diese auf ROOT/admin/catalog/product/edit/id/{product_id_here}.

Das publicActionsMitglied wird für Bestellungen (die Indexierung und Anzeige ermöglichen), in Produkten (zur Bearbeitung) und im Redirect-Controller für Weiterleitungen überschrieben.

Nun meine Frage:
Warum sind nur einige Bearbeitungsaktionen ohne den geheimen Schlüssel zulässig und wann / was sollte ich in meinen benutzerdefinierten CRUD-Modulen ohne den geheimen Schlüssel zulassen?

Marius
quelle

Antworten:

3

Ich habe noch nie eine offizielle Antwort eines Magento-Ingenieurs zu diesem Thema erhalten, aber für mich schien es immer so, als ob diese Funktion verwendet werden soll, wenn Benutzer von außerhalb einer sicheren Sitzung auf eine Seite verlinken können, wenn Sie sonst auf klicken Ein Link, der auf eine sichere Administrator-URL verweist, leitet Sie erst zum Dashboard weiter, nachdem Sie zur Anmeldung aufgefordert wurden.

Ich hatte immer zwei Szenarien im Sinn: Entweder möchten Sie, dass Benutzer bestimmte Administrationsseiten für andere Benutzer freigeben können, oder Sie möchten, dass eine öffentliche Seite auf Ihre benutzerdefinierte URL im Magento-Backend verweist (die sonst nur zum Dashboard umleiten würde). .

Wenn Sie sich den Magento-Kern ansehen, können Sie sehen, dass Magento dies im Wesentlichen für Bewertungen, Bestellungen und Produktseiten implementiert hat. Ich nehme an, die Magento-Ingenieure haben dies getan, damit Administratorbenutzer eines Geschäfts Links direkt über einen Messenger oder eine E-Mail senden können (wie in "Hey, überprüfen Sie diese Reihenfolge: [url] ."). Ich habe einmal eine solche Funktion für eine Seite implementiert, als ich wollte, dass sie von Administratoren problemlos geteilt werden kann.

Grundsätzlich tauschen Sie das erhöhte Risiko eines CSRF-Angriffs gegen die Freiheit, direkt auf eine Seite in Ihrem Admin-Backend verlinken zu können. Dies sollte nur erfolgen, wenn Sie einen bestimmten Anwendungsfall im Auge haben. Ich nehme an, CMS-Seiten fielen nicht in den Anwendungsfall für das Magento-Kernteam, da sie diese "Funktion" anscheinend auf Aktionen im Zusammenhang mit dem Kundensupport und der Bearbeitung von Produkten beschränkt hatten - im Grunde genommen die häufigsten Aufgaben für Kundendienstmitarbeiter Shops.

TiEul
quelle
Das macht Sinn. +1 Wenn ich in den nächsten 24 Stunden keine offizielle Antwort (anders als diese) von einem Teammitglied höre, gehört das Häkchen Ihnen.
Marius
0

Wenn ich raten müsste, würde ich sagen, dass der geheime Schlüssel als Teil des in Magento integrierten CSRF- und / oder XSS-Schutzes verwendet werden kann. Für Seiten, deren Inhalt nicht aufgrund von Benutzereingaben geändert wird, ist es möglicherweise nicht erforderlich, den geheimen Schlüssel dort zu haben.

Anders gesagt, nur Aktionen, die vom Benutzer bereitgestellte Daten / Eingaben empfangen, werden mit einem geheimen Schlüssel geschützt. Nur eine Vermutung.

Brett
quelle
Wenn dies zutrifft, sollte das Bearbeiten einer CMS-Seite auch "öffentlich" sein. So sollte ein Kunde oder eine Steuerregel bearbeitet werden.
Marius
Das ist ein fairer Punkt; und TiEuls Antwort macht Sinn. Ich habe einen Stich in die Dunkelheit gemacht, sieht aus, als hätte ich ihn verpasst.
Brett