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.
fuente
url: '/modules/mod_mymodule/MyFile.php',
Respuestas:
Por lo general, lo único que impide el acceso directo a un archivo joomla es una línea en la parte superior del archivo:
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:
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.
fuente
com_ajax
pero 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 quenone of the Joomla classes will be loaded
me 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?$user = JFactory::getUser()
lo tanto, debería funcionar para obtener la información del usuario actual.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_ajax
para realizarajax
llamadas 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!
fuente