it-swarm.com.de

Wie erlaube ich den direkten Zugriff auf meine benutzerdefinierte .php-Datei in einem Joomla-Modul, um von AJAX aus verwendet zu werden?

Dies ist mein erstes Mal in PHP und mein erstes Mal mit Joomla. Ich komme aus einem starken Nicht-Web-C #/.Net-Hintergrund.

Ich habe ein benutzerdefiniertes Joomla-Modul geschrieben, das über nuSoap mit einem WebService eines Drittanbieters interagiert.

Das alles funktioniert großartig, wenn ich die .php-Dateien nur in meiner eigenen Nicht-Joomla-PHP -Umgebung auf meinem Dev-Rechner laufen lasse.

Wenn ich es jedoch richtig verstehe, blockiert Joomla alle Anfragen bis auf index.php. Ist das richtig?

Wie erlaube ich den direkten Zugriff auf meine eigene .php-Datei?

dies ist ein Beispiel dafür, wie ich es mithilfe von jQuery von clientseitigem Javascript anfordere:

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

wobei sich MyFile.php momentan physisch unter /htdocs/modules/mod_mymodule/MyFile.php befindet.

Ich weiß, dass das Zulassen direkter Anfragen an diese Datei ein Sicherheitsrisiko darstellen kann. Ich muss dies jedoch so schnell wie möglich zum Laufen bringen und werde mich zu einem späteren Zeitpunkt um Sicherheitsbedenken kümmern.

Normalerweise ist das Einzige, was den direkten Zugriff auf eine Joomla-Datei verhindert, eine Zeile oben in der Datei:

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

Wenn dies nicht bereits oben in der Datei steht, sollten Sie keine Probleme haben, einfach direkt auf die Datei zuzugreifen.

Die htaccess-Dateiumleitung hat bereits Bedingungen, die nicht umgeleitet werden, wenn die Datei oder der Ordner vorhanden ist:

# 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

Andernfalls könnten Sie keine Javascript- oder CSS-Dateien laden!

Alles, was Sie wirklich tun müssen, ist, diese Zeile oben in der Datei zu entfernen, und Sie sollten in der Lage sein, direkt auf die Datei zuzugreifen.

Das Wichtigste ist, dass keine der Joomla-Klassen geladen wird. Sie müssen diese Datei daher als eigenständige Datei ausführen (was Sie bereits tun).

Soweit mir bekannt ist, sollte der direkte Zugriff auf eine PHP-Datei kein inhärentes Sicherheitsrisiko darstellen, sofern dies das beabsichtigte Verhalten ist. Da die meisten Dateien in Joomla davon ausgehen, dass nicht direkt auf sie zugegriffen wird, ist es am besten, diesen direkten Zugriff zu blockieren. In Ihrem Fall möchten Sie, dass auf diesen Code direkt zugegriffen wird, sodass kein inhärentes Risiko besteht. Sie könnten andere Sicherheitsrisiken haben, indem Sie POST Daten nicht richtig filtern oder dergleichen (was einfacher ist, wenn Sie Joomla dies für Sie tun lassen), aber das hat nichts damit zu tun, ob die Datei direkt ist zugegriffen oder nicht.

5
David Fritsch

Eine alternative Lösung,

Wenn Sie das Modul in der richtigen Joomla-Struktur entwickelt haben, können Sie statt des Einbindens des Core Joomla-Frameworks in die Moduldatei com_ajax um ajax zum Modul oder Plugin aufzurufen.

Wenn Sie mit Webdiensten arbeiten und vorhaben, es auf vielen Websites zu verwenden, wird so einfach ein Joomla-Modul/Plugin erstellt, das über Ajax aufgerufen werden kann. Die Installation dieses Moduls/Plugins ist wie bei allen anderen Joomla-Erweiterungen ganz einfach.

Eine ausführliche Dokumentation finden Sie hier . Auch wenn Sie eine ältere Version von Joomla verwenden, steht eine Komponente zur Verfügung, um die Ajax-Schnittstelle zu erreichen.

Diese Ajax-Funktion ist in der J3.2-Version und höher integriert, daher sollten die folgenden Versionen diese Komponenten verwenden.

Hoffe es macht Sinn!

4
Jobin Jose