CONTENIDO unter PHP8 und MariaDB10
Re: CONTENIDO unter PHP8 und MariaDB10
Puh!
Noch eine Einschränkung meinerseits.
Es ging im Forum bereits mehrfach um Tests des aktuellsten Branchs von Github.
In diesem Thread hier geht es aber um den Einsatz der 4.10.1 unter PHP 8.
Das habe ich verwechselt.
Ich habe mir vor einiger Zeit die Version des neusten Branchs geholt und die getestet und war insgesamt sehr zufrieden. Ich empfehle, diese zu verwenden. Die Version 4.10.1 unter PHP 8 zum Laufen zu bringen, würde ich mir nicht zutrauen.
Auch dann gibt es Fehler, deren Zahl sollte aber übersichtlich sein.
Achtung: die Version, die man sich da runterladen kann, ist für den Einsatz im Web noch nicht freigegeben. Sie könnte noch Sicherheitslücken haben. Ich benutze sie (bisher) auch nur zur Entwicklung, bin dann aber am Start, wenn es eine offizielle Version gibt. Und ich denke, hier die Bugs zu diskutieren, die noch auftreten, kann helfen, zu einer offiziellen und lauffähigen Version zu kommen.
Grundsätzlich halte ich die Version im Branch für seriöser, als eine selbstumgebastelte 4.10er Version.
Hier noch der Link, die Version, mit der ich arbeite ist aber älter und enthält vermutlich auch noch mehr Fehler als diese hier:
https://github.com/CONTENIDO/CONTENIDO/ ... e-datetime
(Und für diese Version an dieser Stelle ein fettes Dankeschön an alle Beteiligten!)
Bodil
Noch eine Einschränkung meinerseits.
Es ging im Forum bereits mehrfach um Tests des aktuellsten Branchs von Github.
In diesem Thread hier geht es aber um den Einsatz der 4.10.1 unter PHP 8.
Das habe ich verwechselt.
Ich habe mir vor einiger Zeit die Version des neusten Branchs geholt und die getestet und war insgesamt sehr zufrieden. Ich empfehle, diese zu verwenden. Die Version 4.10.1 unter PHP 8 zum Laufen zu bringen, würde ich mir nicht zutrauen.
Auch dann gibt es Fehler, deren Zahl sollte aber übersichtlich sein.
Achtung: die Version, die man sich da runterladen kann, ist für den Einsatz im Web noch nicht freigegeben. Sie könnte noch Sicherheitslücken haben. Ich benutze sie (bisher) auch nur zur Entwicklung, bin dann aber am Start, wenn es eine offizielle Version gibt. Und ich denke, hier die Bugs zu diskutieren, die noch auftreten, kann helfen, zu einer offiziellen und lauffähigen Version zu kommen.
Grundsätzlich halte ich die Version im Branch für seriöser, als eine selbstumgebastelte 4.10er Version.
Hier noch der Link, die Version, mit der ich arbeite ist aber älter und enthält vermutlich auch noch mehr Fehler als diese hier:
https://github.com/CONTENIDO/CONTENIDO/ ... e-datetime
(Und für diese Version an dieser Stelle ein fettes Dankeschön an alle Beteiligten!)
Bodil
-
- Beiträge: 144
- Registriert: Do 25. Jul 2019, 16:08
- Hat sich bedankt: 5 Mal
- Kontaktdaten:
Re: CONTENIDO unter PHP8 und MariaDB10
Vielen Dank. Die Version von github habe ich mir gerade heruntergeladen und werde sie mir hinsichtlich Verwendbarkeit unter PHP8 anschauen.
Denn, um PHP8 kommen wir nicht herum!
Denn, um PHP8 kommen wir nicht herum!
---
Munterbleiben... Bernhard
Munterbleiben... Bernhard
-
- Beiträge: 144
- Registriert: Do 25. Jul 2019, 16:08
- Hat sich bedankt: 5 Mal
- Kontaktdaten:
Re: CONTENIDO unter PHP8 und MariaDB10
Ich habe nun meine Webseite auf den neuen Server (den mit PHP8) umgezogen und die im LOG mitgekennzeichneten Codestellen wie in meinen vorhergehenden Posts abgeändert.
Läuft soweit!
Ich bekomme nur nochundMeldungen.
Ich lasse das jetzt zunächst mal eine Weile laufen, sehe zwischendurch nach dem LOG und beobachte das.
Sollte es zu einem erneuten Crash kommen, davon geht die Welt nicht unter.
Code: Alles auswählen
PHP Fatal Error
Läuft soweit!
Ich bekomme nur noch
Code: Alles auswählen
PHP Deprecated
Code: Alles auswählen
PHP Warning
Ich lasse das jetzt zunächst mal eine Weile laufen, sehe zwischendurch nach dem LOG und beobachte das.
Sollte es zu einem erneuten Crash kommen, davon geht die Welt nicht unter.
---
Munterbleiben... Bernhard
Munterbleiben... Bernhard
-
- Beiträge: 144
- Registriert: Do 25. Jul 2019, 16:08
- Hat sich bedankt: 5 Mal
- Kontaktdaten:
Re: CONTENIDO unter PHP8 und MariaDB10
Ich versuche ja immer, die Dinge zu verstehen; aber hierbei komme ich nicht weiter:
Ich kann "lang" nicht finden. Wo ist das "versteckt"?
Code: Alles auswählen
[php:warn] [pid 21147] [client 195.123.227.7:35568] PHP Warning: Undefined array key "lang" in /var/www/btmr/contenido/classes/class.requestvalidator.php on line 220
---
Munterbleiben... Bernhard
Munterbleiben... Bernhard
-
- Beiträge: 1945
- Registriert: Sa 8. Sep 2007, 16:23
- Wohnort: Brandenburg
- Hat sich bedankt: 3 Mal
- Kontaktdaten:
Re: CONTENIDO unter PHP8 und MariaDB10
Es ist nur eine Warnung und "lang" kann man nicht finden, weil diese Warnung genau darauf hinweist, dass "lang" nicht da ist.Bernhard_4711 hat geschrieben: ↑Di 23. Aug 2022, 09:20 Ich kann "lang" nicht finden. Wo ist das "versteckt"?
In meiner Version (Entwicklerversion) ist an dieser Stelle die Funktion checkParams(), wo in Zeile 220 eine Message ist.
Wie sieht der Code in Deiner Version aus?
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
-
- Beiträge: 144
- Registriert: Do 25. Jul 2019, 16:08
- Hat sich bedankt: 5 Mal
- Kontaktdaten:
Re: CONTENIDO unter PHP8 und MariaDB10
Ich weiß, daß das nur eine Warnung ist. Ich hätte nur gerne gewußt, wo sich "lang" "versteckt"...
Der Code in meiner Version:
Zeile 220 ist diese hier:
Der Code in meiner Version:
Code: Alles auswählen
public function checkParams() {
if ((!$this->checkGetParams()) || (!$this->checkPostParams() || (!$this->checkCookieParams()))) {
$this->logHackTrial();
if ($this->_mode == 'stop') {
ob_end_clean();
$msg = 'Parameter check failed! (%s = %s %s %s)';
// prevent XSS!
$msg = sprintf($msg, htmlentities($this->_failure), htmlentities($_GET[$this->_failure]), htmlentities($_POST[$this->_failure]), htmlentities($_COOKIE[$this->_failure]));
die($msg);
}
}
return true;
}
Code: Alles auswählen
$msg = sprintf...
---
Munterbleiben... Bernhard
Munterbleiben... Bernhard
Re: CONTENIDO unter PHP8 und MariaDB10
In diesem Fall muss die Variable $this->_failure den Wert 'lang' haben.
Und dann ist für bspw. $_GET['lang'] kein Wert gesetzt.
Und dann ist für bspw. $_GET['lang'] kein Wert gesetzt.
-
- Beiträge: 144
- Registriert: Do 25. Jul 2019, 16:08
- Hat sich bedankt: 5 Mal
- Kontaktdaten:
Re: CONTENIDO unter PHP8 und MariaDB10
Das verstehe ich leider nicht. Sorry.
---
Munterbleiben... Bernhard
Munterbleiben... Bernhard
Re: CONTENIDO unter PHP8 und MariaDB10
Also mal ein Beispiel, wie solche Fehler entstehen, prinzipiell, jetzt nicht genau auf dieses Skript bezogen.
Du schreibst in einem Modul z.B. sowas wie
ABER
"lang" ist als GET-Parameter aktuell überhaupt nicht gesetzt. Dann ist der key "lang" des GET ein "undefined key", denn er ist nicht gesetzt.
Die Zeile 220 spuckt in dieser weiß der Himmel wo aufgerufenen Funktion also beim Durchchecken von Parametern, die irgendwo anders abgefragt werden, durch, dass der angefragte Parameter "lang" da ist. Ist er aber nicht, also: PHP Warning.
Du schreibst in einem Modul z.B. sowas wie
Code: Alles auswählen
<?php echo $_GET["lang"]; ?>
"lang" ist als GET-Parameter aktuell überhaupt nicht gesetzt. Dann ist der key "lang" des GET ein "undefined key", denn er ist nicht gesetzt.
Die Zeile 220 spuckt in dieser weiß der Himmel wo aufgerufenen Funktion also beim Durchchecken von Parametern, die irgendwo anders abgefragt werden, durch, dass der angefragte Parameter "lang" da ist. Ist er aber nicht, also: PHP Warning.
Re: CONTENIDO unter PHP8 und MariaDB10
Ja, etwas unübersichtlich wird das dadurch, dass wir hier ein Array ($_GET) haben. Dass es ein Array ist, erkennt man daran, dass dahinter ein Wert in eckigen Klammern steht.
Ein Array ist letztlich auch nur eine Variable, das heißt, es ist möglich darin Informationen zu speichern. 'Normale' Variablen funktionieren wie eine Kiste: Vorne steht der Name drauf und du kannst dann in die Kiste reinpacken, was du willst.
Das Array ist in diesem Bild eher ein Schubladenschrank. Der Schrank hat einen Namen ($_GET), aber auf den Schubladen steht auch immer noch was. Z. B. 'lang'.
In unserem speziellen Fall fehlt aber die Schublade 'lang' und das fällt im Programmablauf auf, wird bemängelt und führt zu einer Warnung. Leere Schubladen können aber auch zu Warnungen führen ...
Ein Array ist letztlich auch nur eine Variable, das heißt, es ist möglich darin Informationen zu speichern. 'Normale' Variablen funktionieren wie eine Kiste: Vorne steht der Name drauf und du kannst dann in die Kiste reinpacken, was du willst.
Das Array ist in diesem Bild eher ein Schubladenschrank. Der Schrank hat einen Namen ($_GET), aber auf den Schubladen steht auch immer noch was. Z. B. 'lang'.
In unserem speziellen Fall fehlt aber die Schublade 'lang' und das fällt im Programmablauf auf, wird bemängelt und führt zu einer Warnung. Leere Schubladen können aber auch zu Warnungen führen ...
-
- Beiträge: 144
- Registriert: Do 25. Jul 2019, 16:08
- Hat sich bedankt: 5 Mal
- Kontaktdaten:
Re: CONTENIDO unter PHP8 und MariaDB10
Und wie wäre die Lösung? Sorry, aber ich weiß es wirklich nicht!
Noch etwas: die vielen spammen das LOG ganz schön voll, so daß es immer eine Warnung im Backend gibt...
Noch etwas: die vielen
Code: Alles auswählen
PHP Deprecated
---
Munterbleiben... Bernhard
Munterbleiben... Bernhard
Re: CONTENIDO unter PHP8 und MariaDB10
Naja. Um zu verhindern das die Warnung mit dem 'lang' auftritt, müsste man, ehe man auf das Feld zugreift, checken, ob es überhaupt gesetzt ist und sich bei der Gelegenheit entscheiden, was man tut, wenn es nicht gesetzt ist. Quasi: gibt es die Schublade 'lang'? Falls ja, nimm den Wert der drinnesteht, anderenfalls nehmen wir den Wert xy. Oder wir lassen die Zeile ganz aus. In unserem Fall würden wir alternativ einen leeren String ('') nehmen.
Das sähe dann so aus:
Die Sytax sagt dann jeweils: Ist der Wert gesetzt ('?') Dann nimm eben diesen Wert ':' andernfalls schreib einen leeren String ('').
Die Deprecated-Meldungen weisen auf Code hin, der zwar problemlos funktioniert, der aber in zukünftigen Versionen nicht mehr funktionieren wird.
Du kannst Contenido dazu bringen, diese Meldungen nicht mehr anzuzeigen.
In meiner Version finde ich die Zeile dazu in der Datei config.misc.php im Verzeichnis /data/config/production/ in Zeile . Da steht bei mir:
Um jetzt die Deprecated-Meldungen zu ignorieren müsstest du die Zeile so ergänzen:
Viel Erfolg!
Bodil
Das sähe dann so aus:
Code: Alles auswählen
$msg = sprintf(
$msg,
htmlentities($this->_failure),
htmlentities(isset($_GET[$this->_failure]) ? $_GET[$this->_failure] : ''),
htmlentities(isset($_POST[$this->_failure]) ? $_POST[$this->_failure] : ''),
htmlentities(isset($_COOKIE[$this->_failure]) ? $_COOKIE[$this->_failure] : '')
);
Die Deprecated-Meldungen weisen auf Code hin, der zwar problemlos funktioniert, der aber in zukünftigen Versionen nicht mehr funktionieren wird.
Du kannst Contenido dazu bringen, diese Meldungen nicht mehr anzuzeigen.
In meiner Version finde ich die Zeile dazu in der Datei config.misc.php im Verzeichnis /data/config/production/ in Zeile . Da steht bei mir:
Code: Alles auswählen
$cfg['php_error_reporting'] = E_ALL & ~(E_STRICT | E_NOTICE);
Code: Alles auswählen
$cfg['php_error_reporting'] = E_ALL & ~(E_STRICT | E_NOTICE | E_DEPRECATED);
Bodil
Zuletzt geändert von bodil am Mo 29. Aug 2022, 07:04, insgesamt 1-mal geändert.
-
- Beiträge: 144
- Registriert: Do 25. Jul 2019, 16:08
- Hat sich bedankt: 5 Mal
- Kontaktdaten:
-
- Beiträge: 144
- Registriert: Do 25. Jul 2019, 16:08
- Hat sich bedankt: 5 Mal
- Kontaktdaten:
Re: CONTENIDO unter PHP8 und MariaDB10
Diese Meldung taucht in der Datei data/logs/security.txt recht oft auf. Was könnte das bedeuten; bzw.: wie könnte man das abstellen? Ist das ebenfalls das "lang"-Ding, dessen Lösung ich nicht sehe oder verstehe?
Code: Alles auswählen
2022-09-05 12:17:58 152.89.196.23
Query String: lang=/../../../..//////////dev/cmdb/sslvpn_websession
Bad parameter: lang
POST array: Array
(
)
GET array: Array
(
[lang] => /../../../..//////////dev/cmdb/sslvpn_websession
)
COOKIE array: Array
(
)
---
Munterbleiben... Bernhard
Munterbleiben... Bernhard
Re: CONTENIDO unter PHP8 und MariaDB10
Dazu zwei Fragen:
1. Passiert das in einem produktiven System?
2. Kommt dir irgendwas von der Zeichenkette /../../../..//////////dev/cmdb/sslvpn_websession vertraut vor?
Vieles im Contenido-CMS funktioniert mit sog. Get-Parametern, das sind Informationen, die in der URL stehen. Bevor Contenido diese Informationen verarbeitet, überprüft es die Werte der fürs System relevanten Parameter auf Sinnhaftigkeit. Bei lang würde ich vermuten, dass es sich dabei um eine Ganzzahl (1, 2, 3...) handeln muss. Das wäre die ID der Sprache, die gerade bearbeitet oder angezeigt wird. Passen das erwartete und das tatsächliche Format nicht zusammen, ignoriert Contenido den Wert und notiert die Abweichung in der security.txt.
Das bedeutet in deinem Fall, dass es irgndwo einen Link geben könnte, in dem ...&lang=/../../../..//////////dev/cmdb/sslvpn_websession&... steht.
Für die Fehlersuche könnte es helfen, den ausgelieferten Quellcode nach "dev/cmdb/sslvpn_websession" oder "lang" zu durchsuchen.
Denkbar wäre aber auch ein Fehler in der Konfiguration, der im Quelcode gar nicht sichtbar ist. Da wäre dann wieder die Frage relevant, wo besagte Zeichenkette (s. o.) herkommt.
1. Passiert das in einem produktiven System?
2. Kommt dir irgendwas von der Zeichenkette /../../../..//////////dev/cmdb/sslvpn_websession vertraut vor?
Vieles im Contenido-CMS funktioniert mit sog. Get-Parametern, das sind Informationen, die in der URL stehen. Bevor Contenido diese Informationen verarbeitet, überprüft es die Werte der fürs System relevanten Parameter auf Sinnhaftigkeit. Bei lang würde ich vermuten, dass es sich dabei um eine Ganzzahl (1, 2, 3...) handeln muss. Das wäre die ID der Sprache, die gerade bearbeitet oder angezeigt wird. Passen das erwartete und das tatsächliche Format nicht zusammen, ignoriert Contenido den Wert und notiert die Abweichung in der security.txt.
Das bedeutet in deinem Fall, dass es irgndwo einen Link geben könnte, in dem ...&lang=/../../../..//////////dev/cmdb/sslvpn_websession&... steht.
Für die Fehlersuche könnte es helfen, den ausgelieferten Quellcode nach "dev/cmdb/sslvpn_websession" oder "lang" zu durchsuchen.
Denkbar wäre aber auch ein Fehler in der Konfiguration, der im Quelcode gar nicht sichtbar ist. Da wäre dann wieder die Frage relevant, wo besagte Zeichenkette (s. o.) herkommt.