Działania publiczne w kontrolerach administratora


12

Odkryłem, że w klasie \Magento\Backend\App\AbstractAction(przodku każdej akcji kontrolera administratora) istnieje element zwany członkiem, _publicActionsktóry jest używany do sprawdzania tajności klucza w następujący sposób:

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

Oznacza to, że jeśli na liście znajduje się nazwa określonej akcji _publicActions, możesz uzyskać dostęp do akcji bez tajnego klucza w adresie URL.
Jest to błogosławieństwo dla programistów i debugowania, ponieważ możesz to zrobić ROOT/admin/module/controller/actionręcznie, bez potrzeby znajomości tajnego klucza administratora, ale nie rozumiem, dlaczego mogę uzyskać dostęp do strony edycji produktu bez tajnego klucza.
Wystarczy zadzwonić na dowolną stronę edycji produktu w ten sposób ROOT/admin/catalog/product/edit/id/{product_id_here}.

publicActionsCzłonek jest zastępowany dla zamówień (które pozwalają indeks view), w produktach (do edycji) i kontroler przekierowania dla przekierowań.

Teraz moje pytanie:
dlaczego dozwolone są tylko niektóre operacje edycji bez tajnego klucza i kiedy / na co mam pozwolić w moich niestandardowych modułach CRUD bez tajnego klucza?

Odpowiedzi:


4

Nigdy nie widziałem oficjalnej odpowiedzi inżyniera Magento w tej sprawie, ale zawsze wydawało mi się, że z tej funkcji można korzystać, gdy chcesz, aby użytkownicy mogli linkować do strony spoza bezpiecznej sesji, ponieważ w przeciwnym razie kliknięcie link odwołujący się do bezpiecznego adresu URL administratora przekieruje Cię do pulpitu nawigacyjnego dopiero po wyświetleniu monitu o zalogowanie się.

Zawsze miałem na myśli dwa scenariusze: albo chcesz, aby użytkownicy mogli udostępniać określone strony administracyjne innym użytkownikom, albo chcesz, aby strona publiczna odwoływała się do niestandardowego adresu URL w zapleczu Magento (który w przeciwnym razie przekierowałby tylko do pulpitu nawigacyjnego) .

Gdy spojrzysz na rdzeń Magento, zobaczysz, że Magento zasadniczo zaimplementował to dla recenzji, zamówień i stron produktów. Podejrzewam, że inżynierowie Magento zrobili to, aby użytkownicy administracyjni sklepu mogli wysyłać linki bezpośrednio przez komunikator lub e-mail (jak w „Hej, sprawdź to zamówienie: [url] .”). Kiedyś zaimplementowałem taką funkcję dla strony, kiedy chciałem, aby była łatwa do współużytkowania przez użytkowników administracyjnych.

Zasadniczo handlujesz zwiększonym ryzykiem ataku CSRF za swobodę bezpośredniego łączenia się ze stroną w zapleczu administratora, co powinno być zrobione tylko wtedy, gdy masz na myśli bardzo konkretny przypadek użycia. Podejrzewam, że strony CMS nie wchodziły w zakres użycia dla głównego zespołu Magento, ponieważ wydawały się ograniczać tę „funkcję” do działań związanych z obsługą klienta i edycją produktów - w zasadzie najczęstszymi zadaniami dla przedstawicieli obsługi klienta w wielu sklepy.


To ma sens. +1 Jeśli nie usłyszę oficjalnej odpowiedzi (innej niż ta) od członka zespołu w ciągu najbliższych 24 godzin, znacznik wyboru należy do Ciebie.
— Marius

0

Gdybym musiał zgadywać, powiedziałbym, że to dlatego, że tajny klucz może być używany jako część CSRF i / lub ochrony XSS wbudowanej w Magento. Dlatego w przypadku stron, które nie modyfikują treści na podstawie danych wprowadzonych przez użytkownika, może nie być konieczne posiadanie tajnego klucza.

Mówiąc inaczej, tylko działania, które otrzymują dane / dane dostarczone przez użytkownika, są chronione tajnym kluczem. Tylko zgadnij.


jeśli to prawda, edycja strony CMS powinna być również „publiczna”. Tak więc należy edytować klienta lub regułę podatkową.
— Marius

To słuszna sprawa; a reakcja TiEula ma sens. Zaciągnąłem się w ciemności, wygląda na to, że tęskniłem.
— Brett
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.