AJAX Query auf neue PHP Datei mit Joomla-Prüfung

  • Hallo zusammen,


    hoffe das mein Titel das aussagt was ich eigentlich meine. Allgemein ist ja bekannt, dass bei eigenen Entwicklungen oder generell wenn wir mit Joomla arbeiten, folgendes am Anfang der Datei stehen sollte:


    Code
    defined('_JEXEC') or die;


    Meine Frage zielt auf folgendes ab:


    • Ich lade mit {sourcer} meine PHP Datei 1, die mir bspw. eine Abfrage durchführt das ich mittels AJAX erreiche. AJAX ruft eine andere PHP (calc.php) auf in der alles bearbeitet wird
    • In der calc.php kann ich aber dann oben genannten Code nicht einfügen, da hier das ganze sonst einfach beendet wird und AJAX in der error Anweisung landet

    Meine Frage also:


    • Ist meine Umsetzung so korrekt?
    • Gibt es weitere Sicherheitsaspekte die ich berücksichtigen sollte?
    • Bspw. hab ich in meinen Files meine Datenbank Infos, da ich nicht die Joomla Klassen verwende


    Ich verwendet auf meiner Seite mehrere eigene Erweiterungen. Die PHP Files habe ich unter /meinePhpFiles/ eingefügt und mittels .htaccess geschützt (denke nicht das man das machen muss aber dann sind se von außen jedenfalls nicht ausführbar).

  • Hallo zusammen,


    ich möchte das Thema erneut aufgreifen, aber jetzt nicht im Zusammenhang mit dem {Sourcerer} Plugin sondern Allgemein. Gehen wir davon aus, dass wir einen »on("click")« Event Handler mit jQuery in der Seite angewendet haben. Ich mach hierzu mal ein kurzes Beispiel:



    Code
    <div class="selector" data-id="2">Dieses Div Element wird überwacht</div>


    mit folgendem JS Code können wir das jetzt überwachen und auf ein Click-Event warten:





    Soweit ist das ja alles recht einfach gehalten. Jetzt kommt aber das, was mir noch nicht klar erscheint. Wenn wir jetzt eine Abfrage mit AJAX machen möchten, dann rufen wir ja eine PHP Datei auf, in der wir die Sachen abarbeiten und die Daten dann zurück zum JS schicken. Wenn wir allerdings über AJAX die PHP Datei aufrufen, dann können wir ja mit


    Code
    defined('_JEXEC') or die;


    nicht aufwarten, da hier '_JEXEC' nicht definiert ist. Daher meine Frage, wie man das Allgemein umsetzt? Lässt man die Prüfung ob '_JEXEC' definiert wurde einfach weg? Dann funktioniert alles aber man hat halt ein Sicherheits-Problem soweit ich das beurteilen kann. In meinem Fall wahrscheinlich nicht der Rede Wert, aber trotzdem interessiert mich das gerade schon etwas.


    Kann ich den über AJAX auch irgendwelche Teil-Modul-PHP Files erreichen oder wie kann ich das sicher umsetzen? Als Anregung mal das obere Javascript etwas erweitert:




    Die derzeit ge-called'te PHP Datei sieht wie folgt aus:



    PHP
    <?php
    echo "Yep";
    
    defined('_JEXEC') or die();
    
    echo "Success";


    Und natürlich wird hier nur das "Yep" zurückgegeben, denn bis zum »Success« komm ich ja nicht.


    Das Problem hier ist auch, dass ich wahrscheinlich gar nicht auf die Joomla-Sachen zurückgreifen kann wie bspw. JFactory:: etc.

  • Hallo zusammen,


    ich hab jetzt in der zu »callenden« PHP Datei mal folgendes drin damit ich auf die Joomla Klassen Zugriff habe. Ob das jetzt sicherheitstechnisch gut ist, kann ich nicht beurteilen. Jedenfalls sehr angenehm damit zu arbeiten.



  • Joomla hat dafür die Komponente com_ajax fertig dabei. Mit der kann man dann via Ajax-url

    index.php?option=com_ajax ...

    1) ins Framework eintauchen (JEXEC-Problem gelöst) und

    2) Plugins bzw. Module zur Ausführung des Codes verwenden.


    Das ist hier etwas (veraltet, aber grundlegend noch aktuell) zu lesen plus Links auf Demo-Plugin und Demo-Modul.

    https://github.com/Joomla-Ajax-Interface/component

    Auch in den docs.joomla.org gibt es eine Dokumentation so weit ich mich erinnere.