¿Cómo permito que AJAX consuma acceso directo a mi archivo .php personalizado en un módulo Joomla?


8

Esta es mi primera vez en PHP y mi primera vez con Joomla. Vengo de un fondo pesado no Web C # / .Net.

He escrito un módulo Joomla personalizado que interactúa con un servicio web de terceros a través de nuSoap.

Todo esto funciona muy bien si solo ejecuto los archivos .php en mi propio entorno PHP que no es Joomla en mi máquina de desarrollo.

Sin embargo, si entiendo correctamente, Joomla bloquea todas las solicitudes a todo excepto index.php, ¿es esto correcto?

¿Cómo permito el acceso directo a mi propio archivo .php?

Este es un ejemplo de cómo lo solicito desde javascript del lado del cliente usando jQuery:

$.ajax({
     url: 'MyFile.php',
     type: 'POST',
     data: { ... },
     success: function(data, status) {
          ....

donde MyFile.php se encuentra físicamente en /htdocs/modules/mod_mymodule/MyFile.php

Sé que permitir solicitudes directas a este archivo puede presentar un riesgo de seguridad, sin embargo, necesito que esto se ejecute lo antes posible y me ocuparé de las preocupaciones de seguridad en un momento posterior.


Intente cambiar su código aurl: '/modules/mod_mymodule/MyFile.php',
TryHarder

Respuestas:


5

Por lo general, lo único que impide el acceso directo a un archivo joomla es una línea en la parte superior del archivo:

defined('_JEXEC') or die('Restricted access');

Si eso no está ya en la parte superior del archivo, entonces no debería tener problemas simplemente accediendo al archivo directamente.

La redirección del archivo htaccess ya tiene condiciones para no redirigir si el archivo o carpeta existe:

# and the requested path and file doesn't directly match a physical file
RewriteCond %{REQUEST_FILENAME} !-f
# and the requested path and file doesn't directly match a physical folder
RewriteCond %{REQUEST_FILENAME} !-d

Si no fuera así, ¡no podría cargar ningún archivo javascript o css!

Entonces, realmente todo lo que necesitas hacer es eliminar esa línea de la parte superior del archivo y deberías poder acceder al archivo directamente.

Lo más importante a tener en cuenta es que ninguna de las clases de Joomla se cargará, por lo que debe ejecutar este archivo como un archivo independiente (que ya está haciendo).

Hasta donde sé, no debería haber ningún riesgo de seguridad inherente al acceder a un archivo php directamente, siempre que ese sea el comportamiento previsto. Dado que la mayoría de los archivos en Joomla asumen que no se accederá a ellos directamente, es mejor bloquear ese acceso directo. En su caso, tiene la intención de acceder a ese código directamente, por lo que no hay riesgo inherente. Es posible que tenga otros riesgos de seguridad al aceptar los datos POST y no filtrarlos adecuadamente (lo que es más fácil si deja que Joomla lo haga por usted), pero eso no está relacionado con si se accede directamente al archivo o no.


Gracias por tu respuesta. Me temo que mi solución no funcionará en ese caso, ya que necesitaré integrar las funciones de usuario de Joomla y cargar otros datos específicos de Joomla. He estado leyendo sobre, com_ajaxpero como soy totalmente nuevo en Joomla (y en PHP por completo), quería una salida rápida que no requiriera implementar cosas adicionales. Ahora que mencionas que none of the Joomla classes will be loadedme doy cuenta de que no es una solución adecuada para mi problema. ¿A menos que haya una forma de "cargar" manualmente el marco de Joomla a pedido desde mi propio archivo .php independiente?
Federico Berasategui


¡Excelente! ¡Gracias! ¿esto me permitirá, por ejemplo, recuperar el perfil de usuario actual conectado?
Federico Berasategui

2
Cualquier llamada de Joomla debería funcionar. Por $user = JFactory::getUser()lo tanto, debería funcionar para obtener la información del usuario actual.
David Fritsch

4

Una solución alternativa

Si ha desarrollado el módulo en la estructura adecuada de Joomla, en lugar de incluir el marco Core Joomla en el archivo del módulo, puede usarlo com_ajaxpara realizar ajaxllamadas al módulo o complemento.

Si está trabajando con servicios web y planea usarlo en muchos sitios, tan simple crea un módulo / complemento de Joomla y se puede acceder a través de ajax y la instalación de este módulo / complemento es bastante simple como cualquier otra extensión de joomla.

Puede encontrar una documentación detallada aquí . Además, si está utilizando una versión anterior de Joomla, hay un componente disponible para lograr la interfaz Ajax. .

Esta característica de Ajax está incorporada con la versión J3.2 y superior, por lo que la siguiente versión debe usar estos componentes.

Espero que tenga sentido!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.