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


8

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

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

Dies alles funktioniert hervorragend, wenn ich nur die .php-Dateien in meiner eigenen Nicht-Joomla-PHP-Umgebung auf meinem Entwicklungscomputer ausführe.

Wenn ich es jedoch richtig verstehe, blockiert Joomla alle Anfragen an alles außer 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 mit jQuery von clientseitigem Javascript anfordere:

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

wo sich MyFile.php derzeit physisch befindet /htdocs/modules/mod_mymodule/MyFile.php

Ich weiß, dass das Zulassen direkter Anforderungen 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.


Versuchen Sie, Ihren Code inurl: '/modules/mod_mymodule/MyFile.php',
TryHarder

Antworten:


5

Normalerweise verhindert 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 Umleitung der htaccess-Datei hat bereits Bedingungen, um nicht umzuleiten, 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 tatsächlich tun müssen, ist, diese Zeile vom Anfang 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 also 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 beabsichtigen Sie, direkt auf diesen Code zuzugreifen, also kein inhärentes Risiko. Sie haben möglicherweise andere Sicherheitsrisiken, wenn Sie POST-Daten akzeptieren und nicht richtig filtern (was einfacher ist, wenn Sie Joomla dies für Sie tun lassen). Dies hängt jedoch nicht davon ab, ob direkt auf die Datei zugegriffen wird oder nicht.


Danke für deine Antwort. Ich befürchte, dass meine Lösung in diesem Fall nicht funktioniert, da ich die Benutzerfunktionen von Joomla integrieren und andere Joomla-spezifische Daten laden muss. Ich habe darüber gelesen, com_ajaxaber da ich für Joomla (und PHP insgesamt) völlig neu bin, wollte ich einen schnellen Ausweg, bei dem keine zusätzlichen Dinge implementiert werden mussten. Nun, da Sie erwähnen, dass none of the Joomla classes will be loadedmir klar ist, dass dies keine richtige Lösung für mein Problem ist. Es sei denn, es gibt eine Möglichkeit, das Joomla-Framework bei Bedarf manuell aus meiner eigenen eigenständigen .php-Datei zu "laden"?
Federico Berasategui


Großartig! Vielen Dank! Kann ich damit beispielsweise das aktuell angemeldete Benutzerprofil abrufen?
Federico Berasategui

2
Jeder Joomla-Anruf sollte funktionieren. Sollte also $user = JFactory::getUser()funktionieren, um Ihnen die aktuellen Benutzerinformationen zukommen zu lassen.
David Fritsch

4

Eine alternative Lösung,

Wenn Sie das Modul in der richtigen entwickelt Joomla Struktur dann statt , einschließlich Kern Joomla Framework Modul Datei , die Sie verwenden können , com_ajaxfür die Herstellung von ajaxAnruf - Modul oder Plugin.

Wenn Sie mit Webdiensten arbeiten und planen, diese auf vielen Websites zu verwenden, wird so einfach ein Joomla-Modul / Plugin erstellt, das über Ajax ausgeführt werden kann. Die Installation dieses Moduls / Plugins ist wie bei allen anderen Joomla-Erweiterungen recht 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 sollte die folgende Version diese Komponenten verwenden.

Hoffe es macht Sinn!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.