Come posso consentire l'accesso diretto al mio file .php personalizzato in un modulo Joomla da utilizzare da AJAX?


8

Questa è la mia prima volta in assoluto in PHP e la mia prima volta in assoluto con Joomla. Vengo da un pesante background non Web C # / .Net.

Ho scritto un modulo Joomla personalizzato che interagisce con un WebService di terze parti tramite nuSoap.

Tutto funziona alla grande se eseguo i file .php nel mio ambiente PHP non Joomla nella mia macchina di sviluppo.

Tuttavia, se capisco correttamente, Joomla blocca tutte le richieste a tutto tranne index.php, è corretto?

Come posso consentire l'accesso diretto al mio file .php?

questo è un esempio di come lo sto richiedendo dal javascript sul lato client usando jQuery:

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

dove MyFile.php è attualmente localizzato fisicamente /htdocs/modules/mod_mymodule/MyFile.php

So che consentire richieste dirette a questo file potrebbe presentare un rischio per la sicurezza, tuttavia devo farlo funzionare al più presto e mi occuperò dei problemi di sicurezza in un momento successivo.


Prova a cambiare il codice inurl: '/modules/mod_mymodule/MyFile.php',
TryHarder

Risposte:


5

In genere l'unica cosa che impedisce l'accesso diretto a un file joomla è una riga nella parte superiore del file:

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

Se questo non è già nella parte superiore del file, non dovresti avere problemi ad accedere direttamente al file.

Il reindirizzamento del file htaccess ha già le condizioni per non reindirizzare se il file o la cartella esiste:

# 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

In caso contrario, non saresti in grado di caricare file javascript o css!

Quindi davvero tutto ciò che devi fare è rimuovere quella riga dalla parte superiore del file e dovresti essere in grado di accedere direttamente al file.

La cosa più importante da notare è che nessuna delle classi Joomla verrà caricata, quindi devi eseguire questo file come file autonomo (cosa che stai già facendo.)

Per quanto ne so, non dovrebbe esserci alcun rischio inerente alla sicurezza nell'accesso diretto a un file php, purché si tratti del comportamento previsto. Poiché la maggior parte dei file in Joomla presume che non saranno accessibili direttamente, è meglio bloccare tale accesso diretto. Nel tuo caso, intendi accedere direttamente a quel codice, quindi nessun rischio intrinseco. Potresti avere altri rischi per la sicurezza accettando i dati POST e non filtrandoli correttamente o simili (il che è più facile se lasci che Joomla lo faccia per te), ma ciò non è correlato al fatto che il file sia direttamente accessibile o meno.


Grazie per la tua risposta. Temo che la mia soluzione non funzionerà in quel caso, dal momento che dovrò integrare le funzionalità utente di Joomla e caricare altri dati specifici di Joomla. Ho letto com_ajaxma dato che sono totalmente nuovo in Joomla (e PHP del tutto), ho voluto una via d'uscita rapida che non richiedesse l'implementazione di cose extra. Ora che dici che none of the Joomla classes will be loadedmi rendo conto che non è una soluzione adeguata al mio problema. A meno che non ci sia un modo per "caricare" manualmente il framework Joomla su richiesta dal mio file .php autonomo?
Federico Berasategui,


Grande! Grazie! questo mi consentirà, ad esempio, di recuperare il profilo utente attualmente connesso?
Federico Berasategui,

2
Qualsiasi chiamata a Joomla dovrebbe funzionare. Quindi $user = JFactory::getUser()dovrebbe funzionare per ottenere le informazioni dell'utente corrente.
David Fritsch,

4

Una soluzione alternativa,

Se il modulo è stato sviluppato nella corretta struttura di Joomla, invece di includere il framework Core Joomla nel file del modulo, è possibile utilizzare com_ajaxper effettuare ajaxchiamate al modulo o al plug-in.

Se lavori con i servizi Web e prevedi di utilizzarlo in molti siti, è così semplice creare un modulo / plug-in Joomla e che può essere eseguito tramite ajax e l'installazione di questo modulo / plug-in è abbastanza semplice come qualsiasi altra estensione di joomla.

Una documentazione dettagliata può essere trovata qui . Inoltre, se si utilizza la versione precedente di Joomla, è disponibile un componente per ottenere l' interfaccia Ajax. .

Questa funzione Ajax è integrata con la versione J3.2 e quindi la versione sotto dovrebbe usare questi componenti.

Spero abbia senso!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.