Comment puis-je autoriser l'accès direct à mon fichier .php personnalisé dans un module Joomla à partir d'AJAX?

8

C'est ma première fois en PHP et ma première fois avec Joomla. Je viens d'un milieu lourd non Web C # / .Net.

J'ai écrit un module Joomla personnalisé qui interagit avec un WebService tiers via nuSoap.

Tout cela fonctionne très bien si je lance simplement les fichiers .php dans mon propre environnement PHP non Joomla sur ma machine de développement.

Cependant, si je comprends bien, Joomla bloque toutes les demandes à tout sauf index.php, est-ce correct?

Comment autoriser l'accès direct à mon propre fichier .php?

voici un exemple de la façon dont je le demande à partir du javascript côté client à l'aide de jQuery:

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

où MyFile.php est actuellement situé physiquement à /htdocs/modules/mod_mymodule/MyFile.php

Je sais que le fait d'autoriser des demandes directes à ce fichier peut présenter un risque pour la sécurité, mais je dois le faire fonctionner dès que possible et je m'occuperai des problèmes de sécurité ultérieurement.

Federico Berasategui
la source
Essayez de changer votre code enurl: '/modules/mod_mymodule/MyFile.php',
TryHarder

Réponses:

5

En règle générale, la seule chose qui empêche l'accès direct à un fichier joomla est une ligne en haut du fichier:

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

Si ce n'est pas déjà en haut du fichier, vous ne devriez avoir aucun problème à accéder directement au fichier.

La redirection de fichier htaccess a déjà des conditions pour ne pas rediriger si le fichier ou le dossier 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

Sinon, vous ne pourrez pas charger de fichiers javascript ou css!

Donc, tout ce que vous devez réellement faire est de supprimer cette ligne du haut du fichier et vous devriez pouvoir accéder directement au fichier.

La plus grande chose à noter est qu'aucune des classes Joomla ne sera chargée, vous devez donc exécuter ce fichier en tant que fichier autonome (ce que vous faites déjà.)

Pour autant que je sache, il ne devrait pas y avoir de risque de sécurité inhérent à accéder directement à un fichier php, tant que c'est le comportement prévu. Étant donné que la majorité des fichiers dans Joomla supposent qu'ils ne seront pas accessibles directement, il est préférable de bloquer cet accès direct. Dans votre cas, vous avez l'intention d'accéder directement à ce code, donc aucun risque inhérent. Vous pouvez avoir d'autres risques pour la sécurité en acceptant les données POST et en ne les filtrant pas correctement ou autre (ce qui est plus facile si vous laissez Joomla le faire pour vous), mais cela n'a aucun rapport avec l'accès direct ou non au fichier.

David Fritsch
la source
Merci pour votre réponse. Je crains que ma solution ne fonctionne pas dans ce cas, car je devrai intégrer les fonctionnalités utilisateur de Joomla et charger d'autres données spécifiques à Joomla. J'ai lu sur com_ajaxmais depuis que je suis totalement nouveau sur Joomla (et PHP tout à fait), je voulais une solution rapide qui ne nécessite pas d'implémenter des choses supplémentaires. Maintenant que vous mentionnez que none of the Joomla classes will be loadedje me rends compte que ce n'est pas une bonne solution à mon problème. À moins qu'il n'y ait un moyen de "charger" manuellement le framework Joomla à la demande à partir de mon propre fichier .php autonome?
Federico Berasategui
Génial! Merci! cela me permettra-t-il, par exemple, de récupérer le profil utilisateur actuellement connecté?
Federico Berasategui
2
Tout appel Joomla devrait fonctionner. Cela $user = JFactory::getUser()devrait donc fonctionner pour vous obtenir les informations de l'utilisateur actuel.
David Fritsch
4

Une solution alternative,

Si vous avez développé le module dans la structure Joomla appropriée , au lieu d'inclure le framework Core Joomla dans le fichier module, vous pouvez l'utiliser com_ajaxpour ajaxappeler le module ou le plugin.

Si vous travaillez avec des services Web et prévoyez de l'utiliser dans de nombreux sites, la création d'un module / plugin Joomla est si simple et peut être effectuée via ajax et l'installation de ce module / plugin est assez simple comme toutes les autres extensions Joomla.

Une documentation détaillée peut être trouvée ici . De plus, si vous utilisez une ancienne version de Joomla, un composant est disponible pour réaliser l' interface Ajax. .

Cette fonctionnalité Ajax est intégrée à la version J3.2 et au-dessus, donc la version ci-dessous devrait utiliser ces composants.

J'espère que cela aura du sens!

Jobin Jose
la source