Odkryłem, że w klasie \Magento\Backend\App\AbstractAction
(przodku każdej akcji kontrolera administratora) istnieje element zwany członkiem, _publicActions
któ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/action
rę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}
.
publicActions
Czł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?
źródło
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.
źródło