web-dev-qa-db-fra.com

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

C’est ma première fois dans PHP et ma première fois avec Joomla. Je viens d’un arrière-plan non-Web C #/.Net lourd.

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

Tout cela fonctionne bien si je ne fais que lancer les fichiers .php dans mon propre environnement non-Joomla PHP dans ma machine de développement).

Cependant, si je comprends bien, Joomla bloque toutes les requêtes sauf pour 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 de 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 à l'adresse /htdocs/modules/mod_mymodule/MyFile.php

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

8

Généralement, 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 cela ne figure pas déjà en haut du fichier, vous ne devriez pas avoir de difficulté à accéder directement au fichier.

La redirection de fichier htaccess a déjà des conditions pour ne pas rediriger le fichier ou le dossier:

# 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 pourriez charger aucun fichier javascript ou css!

En réalité, tout ce que vous avez à faire est de supprimer cette ligne du haut du fichier et de pouvoir y accéder directement.

La chose la plus importante à 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 êtes déjà en train de faire).

Autant que je sache, il ne devrait y avoir aucun risque de sécurité inhérent à l'accès direct à un fichier php, aussi longtemps qu'il s'agit du comportement souhaité. Étant donné que la majorité des fichiers de Joomla supposent qu’ils ne seront pas directement accessibles, il est préférable de bloquer cet accès direct. Dans votre cas, vous souhaitez que ce code soit directement accessible, donc aucun risque inhérent. Vous pourriez avoir d'autres risques de sécurité en acceptant les données POST) et en ne les filtrant pas correctement (par exemple, ce qui est plus facile si vous laissez Joomla le faire pour vous)), que le fichier soit directement lié ou non. accédé ou pas.

5
David Fritsch

Une solution alternative,

Si vous développez le module proprement dit structure Joomla alors au lieu d'inclure le framework Joomla Core dans le fichier de module, vous pouvez utiliser com_ajax pour avoir fait ajax appeler un module ou un plugin.

Si vous travaillez avec des services Web et prévoyez de l’utiliser sur de nombreux sites de manière simple, vous créez un module/plug-in Joomla et vous pouvez y accéder via ajax. L’installation de ce module/plug-in est relativement simple, comme toute autre extension joomla.

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

Cette fonctionnalité Ajax est intégrée à la version J3.2 et supérieure, de sorte que la version ci-dessous doit utiliser ces composants.

J'espère que cela a du sens!

4
Jobin Jose