it-swarm.com.de

Verwenden der externen PHP Bibliothek und definiert ('_ JEXEC') oder sterben;

Ich möchte die Hatemile-for-PHP-Bibliothek ( https://github.com/hatemile/hatemile-for-php ) in meinem Plugin verwenden.

Da ich diese Bibliothek immer nur in diesem einen Plugin verwende, habe ich sie in den Plugin-Ordner anstatt in den Bibliotheksordner aufgenommen.

Jetzt frage ich mich, ob ich die Zeile hinzufügen musste

defined('_JEXEC') or die;

zum Anfang jeder PHP Datei dieser externen Bibliothek.

Ich habe mir den Ordner mit den Joomla-Bibliotheken (zum Beispiel /libraries/phpass/PasswordHash.php) und einige beliebte Joomla-Erweiterungen angesehen. Mir wurde klar, dass die Dateien von Drittanbietern PHP Dateien ohne Zeile enthalten sind)

defined('_JEXEC') or die;

oben in der Datei.

Ist es der richtige Weg, eine externe Bibliothek mit Joomla! Zu verwenden?

2
astridx

Es ist gleichzeitig eine gute und eine schlechte Frage. Warum? Gut, denn die Frage klingt für viele, viele Joomla-Benutzer/Superuser „exotisch“. Warum gibt es diese kleine Codezeile überall wie die Coca-Cola von Joomla? :) 'Niemand' versteht, warum es so viel funktioniert.

defined('_JEXEC') or die('gooo to hell!');

Die Frage ist schlecht, weil in der Joomla-Dokumentation ganz klar erklärt wird, was diese Zeile ist, warum sie vorhanden ist und wann sie verwendet werden soll und wann nicht. Daher beantworten die regelmäßigen, sachkundigen Benutzer von Joomla Stackexchange diese Art von Fragen nicht gerne, da ein Klick auf das offizielle Joomla-Dokument erforderlich ist und jemand es nur innerhalb von 2 Minuten lesen muss. Warum hier kopieren? Aber lassen Sie uns die Informationen einfach hier einfügen, wirklich nur zum Spaß:

_JEXEC ist eine Konstante, die normalerweise in der Datei index.php im Stammverzeichnis von Joomla! Instanz und wird verwendet, um einen sicheren Einstiegspunkt in Joomla zu markieren. Die definierte oder die Prüfung stellt sicher, dass _JEXEC im Pfad definiert wurde, um zur Datei zu gelangen

Die allgemeine Regel für die JEXEC-Prüfung lautet, ob die Datei PHP von einer anderen Datei abhängt, um ordnungsgemäß zu funktionieren. Wenn Sie in der Regel direkt ohne die JEXEC-Prüfung auf eine Datei zugreifen und ein PHP - Fehler (vorausgesetzt, Ihre PHP - Fehlerberichterstattung ist standardmäßig so eingestellt, dass Fehler angezeigt werden) über eine fehlende Variable, Funktion, ein Objekt oder ähnliches ausgelöst wird Die Datei muss geschützt werden.

Einige Dateien müssen nicht vor dieser Prüfung geschützt werden. Dies können Dateien ohne externe Abhängigkeiten sein (z. B. eine einfache Klasse oder ein Codebit), oder es können externe Dateien sein, die ohne Joomla! Funktionieren können. Beispiele hierfür sind der GZip'd Javascript-Generator von TinyMCE, der vollständig in sich geschlossen ist.

Es ist eine ziemlich klare Erklärung (aus dem Dokument kopiert).

Ich würde jexec nicht oben auf die in der Frage genannten Dateien setzen.

;)

Link zum Dokument: https://docs.joomla.org/JEXEC

Es ist nicht nur eine exotische Frage, sondern ein gutes Horror-Thema, anscheinend mit allen möglichen bösen Geistern, jederzeit und überall. Aber was ist wenn dies und was wenn das ... Gute Frage. :) Wenn eine Person eher einem paranoiden Typ ähnelt, ist es auf jeden Fall besser, _jexec check über alle Dateien zu setzen, auch ohne die Dateien und Funktionen zu untersuchen und irgendetwas zu verstehen. Das ist sicher. (Ich werde OSM bitten, diese letzten fehlenden Sätze offiziell zu ihren Dokumenten hinzuzufügen.) ;;

Dies war nicht Teil der Frage, aber wichtig:

Wenn Ihre Erweiterung öffentlich ist und auf vielen Joomla-Websites verteilt und verwendet werden soll, ist dies ein Muss für die Verwendung der von _jexec definierten Prüfung oben in allen PHP - Dateien. Es ist das Gesetz "Besser paranoid sein".

2
Zollie

Es gibt ein gutes Video von der Joomla World Conference 2016 über eine Präsentation von Namespaces von Jisse Reitsma, das um die 23-Minuten-Marke herum ein Beispiel enthält, das schließlich eine Situation beschreibt, in der Sie Jexec nicht in Ihrem Code verwenden würden, damit es mit anderen geteilt werden kann Plattformen wie Wordpress/Magento, https://www.youtube.com/watch?v=Dyx05GR4Bms Mit einigen weiteren der beliebten Joomla-Erweiterung, die mit Wordpress Aromen und einige der neueren Funktionen, die mit Joomla 4 geliefert werden. Ich denke, es könnte eine Lockerung der Erwartung geben, dass Jexec in jeder Datei enthalten sein wird. Um die Frage von @ astridx zu beantworten, würde ich Jexec nicht zur externen Bibliothek hinzufügen, da dies nicht der Fall ist Joomla-Code.

1
Irata