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?

Marius
źródło

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.

TiEul
źródło
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.

Brett
źródło
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