Acciones públicas en controladores administrativos

12

Descubrí que en la clase \Magento\Backend\App\AbstractAction(el antecesor de cada acción de controlador de administrador) hay un miembro llamado _publicActionsque se usa en la validación de la clave secreta de esta manera:

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

Esto significa que si aparece un nombre de acción determinado _publicActions, puede acceder a la acción sin la clave secreta en la url.
Esto es una bendición para el desarrollo y la depuración, porque puede hacerlo de forma ROOT/admin/module/controller/actionmanual, sin la necesidad de conocer la clave secreta de administrador, pero lo que no entiendo es por qué puedo acceder a la página de edición del producto sin la clave secreta.
Simplemente llame a cualquier página de edición de productos como esta ROOT/admin/catalog/product/edit/id/{product_id_here}.

El publicActionsmiembro se sobrescribe para pedidos (que permiten indexar y ver), en productos (para editar) y en el controlador de redireccionamiento para redireccionamientos.

Ahora mi pregunta:
¿Por qué solo se permiten algunas acciones de edición sin la clave secreta, y cuándo / qué debo permitir en mis módulos CRUD personalizados sin la clave secreta?

Marius
fuente

Respuestas:

4

Nunca he visto una respuesta oficial de un ingeniero de Magento sobre el asunto, pero siempre me pareció que esta función se debe utilizar cuando se desea que los usuarios puedan vincular a una página desde fuera de una sesión segura, ya que de lo contrario hacer clic en un enlace que hace referencia a una URL de administrador segura solo lo redirigirá al panel después de solicitarle que inicie sesión.

Siempre tuve dos escenarios en mente: o quieres que los usuarios puedan compartir ciertas páginas de administración con otros usuarios o quieres que alguna página pública haga referencia a tu URL personalizada en el back-end de Magento (que de lo contrario solo redirigiría al panel de control) .

Cuando observa el núcleo de Magento, puede ver que Magento esencialmente lo ha implementado para revisiones, pedidos y páginas de productos. Supongo que los ingenieros de Magento hicieron esto para que los usuarios administradores de una tienda puedan enviar enlaces directamente a través de un mensajero o un correo electrónico (como en "Oye, mira este orden: [url] "). Una vez implementé una función como esta para una página cuando quería que los usuarios administradores pudieran compartirla fácilmente.

Básicamente, está intercambiando el mayor riesgo de un ataque CSRF por la libertad de poder vincular directamente a una página en su back-end de administrador, lo que solo debe hacerse cuando tiene en mente un caso de uso muy seguro. Supongo que las páginas de CMS no entraron en el caso de uso del equipo central de Magento, ya que parecían haber limitado esta "característica" a acciones relacionadas con el soporte al cliente y la edición de productos, básicamente las tareas más comunes para los representantes de servicio al cliente en muchos historias.

TiEul
fuente
Esto tiene sentido. +1 Si no escucho una respuesta oficial (diferente a esta) de un miembro del equipo en las próximas 24 horas, la marca de verificación es suya.
Marius
0

Si tuviera que adivinar, diría que es porque la clave secreta puede usarse como parte de la protección CSRF y / o XSS incorporada en Magento. Entonces, para las páginas que no modifican su contenido en función de la entrada del usuario, puede que no sea necesario tener la clave secreta allí.

Dicho de otra manera, solo las acciones que reciben datos / entradas proporcionadas por el usuario están protegidas con una clave secreta. Solo una suposición.

Brett
fuente
si eso era cierto, entonces editar una página CMS debería ser "público" también. Por lo tanto, debe editar un cliente o una regla fiscal.
Marius
Ese es un punto justo; y la respuesta de TiEul tiene sentido. Estaba haciendo una puñalada en la oscuridad, parece que me perdí.
Brett