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.
quelle
url: '/modules/mod_mymodule/MyFile.php',
Antworten:
Normalerweise verhindert das einzige, was den direkten Zugriff auf eine Joomla-Datei verhindert, eine Zeile oben in der Datei:
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:
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.
quelle
com_ajax
aber 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, dassnone of the Joomla classes will be loaded
mir 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"?$user = JFactory::getUser()
funktionieren, um Ihnen die aktuellen Benutzerinformationen zukommen zu lassen.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_ajax
für die Herstellung vonajax
Anruf - 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!
quelle