Plugin calendar_xh und PHP 8 - fataler Fehler

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
knollsen
Posts: 459
Joined: Wed Nov 06, 2013 2:28 pm

Re: Plugin calendar_xh und PHP 8 - fataler Fehler

Post by knollsen » Fri Jan 27, 2023 6:03 pm

Ich habe immer noch das alte calendar-plugin im Einsatz, weil mich damals das laden der Seiten genervt hatte, nur wenn man die Monate gewechselt hatte. Da das Plugin für mich sehr übersichtlich war, konnte ich das schnell modifizieren und für neue PHP-Versionen anpassen.
Ich hoffe Christoph hat nix dagegen, das ich die modifizierte Variante hier Poste. Läuft unter PHP8.2. Ihr könntet es ja mal auf Eurer Umgebung testen, ob dies auch so ist.

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Plugin calendar_xh und PHP 8 - fataler Fehler

Post by cmb » Fri Jan 27, 2023 6:17 pm

knollsen wrote:
Fri Jan 27, 2023 6:03 pm
Ich hoffe Christoph hat nix dagegen, das ich die modifizierte Variante hier Poste.
Ah, Calendar 1.2! Macht Sinn auch dafür ein Update bereit zu stellen. Danke! :)
Christoph M. Becker – Plugins for CMSimple_XH

pergachris
Posts: 190
Joined: Fri Aug 31, 2012 9:28 pm
Location: Hemden (NRW)

Re: Plugin calendar_xh und PHP 8 - fataler Fehler

Post by pergachris » Sat Jan 28, 2023 7:17 am

Hallo,

mir ist gerade noch was aufgefallen.

Ich habe nun den "Second-Calendar" aktiviert.

Bekomme folgende Antwort beim Aufruf der Seite, wo der 2. Kalender erscheinen soll:
Uncaught Error: Undefined constant "borken" in /mnt/web008/htdocs/bor/cmsimple/functions.php(242) : eval()'d code:1
Stack trace:
#0 /mnt/web008/htdocs/bor/cmsimple/functions.php(242): eval()
#1 /mnt/web008/htdocs/bor/cmsimple/functions.php(202): XH_evaluateSinglePluginCall()
#2 /mnt/web008/htdocs/bor/cmsimple/functions.php(299): evaluate_plugincall()
#3 /mnt/web008/htdocs/bor/cmsimple/cms.php(1287): evaluate_scripting()
#4 /mnt/web008/htdocs/bor/index.php(6): include('...')
#5 {main}
thrown in /mnt/web008/htdocs/bor/cmsimple/functions.php(242) : eval()'d code on line 1
"borken" ist der Name für den zweiten Kalender.

pergachris
Posts: 190
Joined: Fri Aug 31, 2012 9:28 pm
Location: Hemden (NRW)

Re: Plugin calendar_xh und PHP 8 - fataler Fehler

Post by pergachris » Sat Jan 28, 2023 7:41 am

Ich habe gerade Calendar 1.2 (1.2.10) angesehen.
Der würde quasi ausreichend sein, jedoch wünsche ich mir einen zweiten Kalender zusätzlich.
So wie das bei 1.4 machbar ist.

Gibt es eine Möglichkeit zwei Kalender auszuführen?
(Oder beide Plugins gemeinsam zu nutzen :oops: )

knollsen
Posts: 459
Joined: Wed Nov 06, 2013 2:28 pm

Re: Plugin calendar_xh und PHP 8 - fataler Fehler

Post by knollsen » Sat Jan 28, 2023 9:03 am

Wenn du den modifizierten Kalender meinst (v1.7)
Du willst quasi einen Hauptkalender, dann einen Ferienkalender (oder so), (so wie bei Google du den Kalender anlegen kannst)?
Problem wäre das bestimmt nicht sowas zu programmieren beziehungsweise zu ergänzen.

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Plugin calendar_xh und PHP 8 - fataler Fehler

Post by cmb » Sat Jan 28, 2023 10:45 am

pergachris wrote:
Sat Jan 28, 2023 7:17 am
Bekomme folgende Antwort beim Aufruf der Seite, wo der 2. Kalender erscheinen soll:
Uncaught Error: Undefined constant "borken" in /mnt/web008/htdocs/bor/cmsimple/functions.php(242) : eval()'d code:1
Stack trace:
#0 /mnt/web008/htdocs/bor/cmsimple/functions.php(242): eval()
Sieht mir so aus, als ob das am Plugin-Aufruf liegt. Da hast da vermutlich etwas wie {{{calendar2(borken)}}} stehen, aber das borken müsste grundsätzlich in Anführungszeichen gesetzt werden, also {{{calendar2('borken')}}}. Allerdings funktioniert Calendar 1.4 nicht so, dass man den Kalendernamen an die Funktion übergibt, sondern man ruft einfach {{{calendar2()}}} statt {{{calendar()}}} auf (es gibt eben maximal zwei verschiedene Kalender).
pergachris wrote:
Sat Jan 28, 2023 7:41 am
Gibt es eine Möglichkeit zwei Kalender auszuführen?
(Oder beide Plugins gemeinsam zu nutzen )
Beide Plugins kann man nicht gleichzeitig ausführen, da sie intern den selben Namen haben ("calendar"); einfach den Pluginordner umbenennen, funktioniert nicht.

Mehrere Kalender erscheint mir ein sinnvolles Feature, weil man damit eben auch recht elegant den Mehrsprachensupport ersetzen könnte. Ob und wann ich dazu komme, kann ich aber nicht sagen.

Vielleicht macht ja knollsen das, oder jemand anderes. :)
Christoph M. Becker – Plugins for CMSimple_XH

pergachris
Posts: 190
Joined: Fri Aug 31, 2012 9:28 pm
Location: Hemden (NRW)

Re: Plugin calendar_xh und PHP 8 - fataler Fehler

Post by pergachris » Sat Jan 28, 2023 2:56 pm

cmb wrote:
Sat Jan 28, 2023 10:45 am


Sieht mir so aus, als ob das am Plugin-Aufruf liegt. Da hast da vermutlich etwas wie {{{calendar2(borken)}}} stehen, aber das borken müsste grundsätzlich in Anführungszeichen gesetzt werden, also {{{calendar2('borken')}}}. Allerdings funktioniert Calendar 1.4 nicht so, dass man den Kalendernamen an die Funktion übergibt, sondern man ruft einfach {{{calendar2()}}} statt {{{calendar()}}} auf (es gibt eben maximal zwei verschiedene Kalender).
Oh, tut mir leid. Mein Fehler. :oops:
Ich habe tatsächlich was zwischen die Klammern geschrieben. Mit {{{calendar2()}}} klappt es.

knollsen
Posts: 459
Joined: Wed Nov 06, 2013 2:28 pm

Re: Plugin calendar_xh und PHP 8 - fataler Fehler

Post by knollsen » Sun Jan 29, 2023 4:43 pm

cmb wrote:
Sat Jan 28, 2023 10:45 am
Vielleicht macht ja knollsen das, oder jemand anderes.
Ja, das werde ich versuchen, denn das ist wirklich ne gute Idee!
Aber bei der Hilfe-Seite könnt Ihr mir ja behilflich sein! Das ist immer net so mein Part ... ;)

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Plugin calendar_xh und PHP 8 - fataler Fehler

Post by cmb » Sun Jan 29, 2023 10:17 pm

cmb wrote:
Fri Jan 27, 2023 9:53 am
Da werde ich wohl am Wochenende Calendar 1.4.10 veröffentlichen.
Und da ist Calendar 1.4.10.

Und natürlich habe ich Dösbaddel die von Frank weiter oben gemeldeten Probleme ganz vergessen. Beides nun vermerkt (https://github.com/cmsimple-xh/calendar/issues/21 und https://github.com/cmsimple-xh/calendar/issues/22); schau ich mir nun an.
Christoph M. Becker – Plugins for CMSimple_XH

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Plugin calendar_xh und PHP 8 - fataler Fehler

Post by cmb » Sun Jan 29, 2023 11:26 pm

cmb wrote:
Fri Jan 27, 2023 1:11 pm
frase wrote:
Fri Jan 27, 2023 12:15 pm
Wenn ich in der index.php Zeile 6 wieder zurücksetze:

Code: Select all

if ((!function_exists('sv')) || preg_match('!calendar'.DIRECTORY_SEPARATOR.'index.php!i', sv('PHP_SELF')))die('Access denied');
… dann funktioniert es wieder.
Das ist ein Ding!
Ja, tatsächlich! Ich dachte schon, es hätte was mit Apache unter Windows zu tun, aber habe dann doch noch mal nachgedacht, bevor ich mich daran machte, eine passende Umgebung aufzusetzen, und mod_php zu debuggen. :)

Der Sinn dieser Prüfung ist ja, dass man die Datei nicht direkt aufrufen kann. Die Idee (nicht wirklich die Umsetzung; da fehlt der $-Anker am Ende, und der Punkt müsste maskiert sein) ist dabei, dass dann die abgerufene URL mit calendar/index.php enden müsste. Das tut sie aber auch, wenn die CMSimple_XH Installation in einem Verzeichnis namens calendar abgelegt wurde; dann wird nämlich CMSimple_XHs index.php als calendar/index.php abgerufen. Und dann denkt das Plugin: hey, böswilliger Direktzugriff – nope, böser Hacker, nicht mit mir!

Eigentlich genügt ja schon die Prüfung, ob die Funktion sv() definiert ist. „Klar, vielleicht wird die entsprechende Funktion irgendwann aus CMSimple_XH entfernt, aber dafür von PHP, einer PHP-Erweiterung oder einem Prepend-Skript definiert. Also gehen wir auf Nummer sicher, und prüfen auch noch die URL. Wirklich viel können wir da aber nicht sagen, weil selbst der Name des Plugin-Ordners konfigurierbar ist. Also eben calendar/index.php.“ Und genau diese Idee ist Murks. Wenn einem die Prüfung auf sv() (oder vielleicht sprechender auf CMSIMPLE_XH_VERSION) nicht genügend sicher ist, der könnte ein count(get_included_files() === 1) verwenden (bin aber nicht sicher, wie sich das bzgl. auto_prepend_file verhält; wahrscheinlich gäbe das große Probleme).

Minimal invasiv würde ich folgendes vorschlagen:

Code: Select all

if (!function_exists('sv')) die('Access denied');
Alternative (die ich kürzlich verwendet habe):

Code: Select all

if (!defined("CMSIMPLE_XH_VERSION")) {
    header("HTTP/1.1 403 Forbidden");
    exit;
}
Wie würdet ihr es machen?
Christoph M. Becker – Plugins for CMSimple_XH

Post Reply