Umstieg auf PHP 8.0 bzw. 8.1

Der Wechsel der PHP Versionen ist immer mit Vorsicht zu genießen. Das war vor Jahren mit PHP 5.4 auf die 7.x Reihe so und ist nun von 7.4 auf 8.x leider auch so. Aber nachdem nun Nextcloud gemeint hatte, sie müssen mal PHP 7.4 aus der Unterstützung herausnehmen, hab ich mal Ramba Zamba gemacht.
Einfach mal auf dem Webspace PHP 8.0 eingeschaltet. Meine Cloud lief danach einfach weiterhin. Also alles kein Problem. Meine Geschäftsseite läuft auch weiterhin ohne Probleme. Aber dieses Blog lief dann erstmal nicht mehr.

Was hab ich gemacht?
- Einfach mal das PHP Compatibility Checker Plugin installieren und auf die PHP 7.3 checken.
- Das Ergebnis gibt schon mal einen guten Hinweis, welche Plugins oder Themes potenziell Probleme geben werden.
-> Bei mir waren dies beispielsweise das Soundcloud Embed Plugin und das Midhan Kommentar Bearbeitungs-Plugin. Da aber beide Plugins schon uralt sind, hab ich diese mal deaktiviert und mit PHP 8.0 ausprobiert. Hat wunderbar funktioniert.
- Für das Bearbeiten von Kommentaren gibt es diese schlanke Alternative. Es macht was es soll. Der Kommentator kann seinen Kommentar noch 5 Minuten lang editieren oder auch löschen.

Und siehe da, der Umzug auf PHP 8.1 war dann auch kein Thema mehr.

Warum ist PHP 8.0 bzw. 8.1 überhaupt erstrebenswert? Na erstens, weil diese Versionen noch aktuell weiterentwickelt werden und damit auch mit Sicherheitspatches gefüttert werden. Außerdem soll 8.1 nochmal einen enormen Performance Boost bringen. Und gerade für WordPress oder Nextcloud kann PHP nie schnell genug sein.

Einziger Wehmutstropfen: Mein uraltes Toffifee Skript von 2005 tut aktuell nun nicht mehr.
Liegt vielleicht am GET Request. Aber ich bin da aktuell einfach zu faul. Vielleicht kümmere ich mich mal darum, wenn ich viel Zeit und Lust habe.
Oder hat einer meiner Leser einen Tipp, was die Ursache sein könnte?
Ich muss mich da erstmal wieder reinfuchsen und vermutlich sind die REQUEST_METHOD schon problematisch. Aber wie gesagt. Das Teil ist halt und hat eigentlich nur noch historischen Wert. Lustig war es aber trotzdem.

WordPress ist eine Kräze

Seit Jahren habe ich nicht mehr mit WordPress rumhantiert. Nun kommt aber mein Provider so langsam auf die Idee mal PHP 5.6 komplett zu deaktivieren. Ist soweit ja auch begrüßenswert. Schließlich ist das eine uralte Version. Na gut ich kenne noch eine Website die immer noch mit PHP 5.2 läuft, weil die Software nicht mehr upgedatet wird. Alles ok.
Also mal in den sauren Apfel gebissen und PHP 7.2 aktiviert. Na gut, das mein Theme nicht funktionieren wird war mir schon von Anfang klar. Ist schließlich von 2011 und damals war 5.6 aktuell. PHP ändert ja leider am laufenden Band irgendwelche Funktionen. Gut, ich habe dann eben das Theme deaktiviert. Danach ging aber erstmal gar nichts mehr. Ich habe mehrere verschiedene Themes aktiviert und immer eine weiße Seite bekommen.
Nun war mein Kopf auf Alarmbereitschaft. Was hab ich nun gemacht. Also mal die index.php durchgeschaut bis irgendwann in die wp_load.php gelangt bin und dann die wp_config.php gesucht habe. Die habe ich ewig gesucht und irgendwann ist mir eingefallen, dass ich die wp_config.php mal eine Ebene höher verschoben habe.
Und siehe da: Aus irgendeinem Grund fand ich es damals notwendig oder sinnvoll das Themeverzeichnis dort festzuschreiben. Und diese Konstante wurde nicht mehr upgedatet und wurde mir nun zum Verhängnis.
Aber gut, ich hab die Zeilen einfach auskommentiert und aktualisiert. Und siehe da, nun funktioniert es wieder. :)

Nun läuft das Blog mit PHP 7.2 und eigentlich ist WordPress gar nicht so schlimm. Es ist nur wie PHP. Die Altlasten klauen einem die letzten Haare.

xt:commerce 3 Sicherheitslücke bei whos_online.php

Es gibt ja nach wie vor diesen alten und sehr krepeligen Shop namens "xt:commerce 3". Da er Open Source ist wurde er auch immer mal wieder geforkt. Beispielsweise durch Gambio oder modified
Die aktive Entwicklung wurde allerdings irgendwann 2008 komplett eingestellt. Seitdem gibt es keine wirklichen Patches mehr für diesen Shop.

Nun haben die Entwickler von Gambio eine kleine Lücke entdeckt, die sie als sicherheitskritisch einstufen. Unter ganz speziellen Umständen: Nämlich der Admin ist im Shop eingeloggt und schaut gerade via "Who is online" die letzten Besucher an und ein Referer hat zufällig eine bösartige Form angenommen, dann könnte der Shop gekapert werden.

Deshalb ist die Lösung auch ganz simpel:
Beim Auslesen des Links aus der Datenbank werden sämtliche HTML Zeichen durch Unicode ersetzt.

    $whos_online['last_page_url'] = htmlentities($whos_online['last_page_url']);

Gut, diese Zeile war im Original noch nicht drin. Deshalb könnte jemand mit dem Anhang "" tatsächlich versuchen die Session zu übernehmen.
Da allerdings die Who is Online Einträge in der Datenbank nur sehr zeitlich begrenzt gespeichert werden braucht es wirklich sehr großes Glück vom Angreifer, dass er den Admin erwischt und dieser dann auch noch zufällig auf "Who is Online" vorbeischaut.

Aber deshalb so einen großen Aufschrei zu veranstalten und auf Rückfrage keine genaue Auskunft zu geben ist doch auch lächerlich.

Zitat von Gambio:

wir bitten um Verständnis, dass wir derzeit noch keine Detailinformationen herausgeben können, die möglicherweise zum Ausnutzen der Sicherheitslücke verwendet werden könnten. Wir möchten zunächst allen Shopbetreibern ausreichend Zeit geben, den eigenen Shop gegen mögliche Angriffe zu sichern. Anschließend werden wir gern entsprechende Informationen herausgeben

Jetzt wo Heise Online schon darüber berichtete ist das Kind schon in den Brunnen gefallen.
Manchmal ist es sinnvoller die Lücke offensiver zu berichten, dann können andere Security Nerds die Lücke auch einschätzen.

Allgemein ist zu empfehlen xt:commerce 3 nicht mehr zu verwenden. Der Code macht sowieso nicht allzu viel Spaß und ist sowieso sehr schwer auf aktuellen Servern zu betreiben. Es wird nämlich noch PHP 5.2 benötigt und das wird von großen Anbietern wie 1und1, Strato oder auch Hetzner nicht mehr angeboten.
Aber domainfactory bietet die alte PHP 5.2 noch an und die haben auch in ihrem Blog recht schnell über die "Lücke" berichtet.

Toffifee Skript Code auf Github

Nachdem ich in den letzten Jahren nicht mehr so richtig zum Coden gekommen bin und auch mal der Welt etwas Gutes tun wollte, gibt es eben den Code auf zum Toffifee-Skript auf Github.
Falls es jemand weiter entwickeln möchte (beispielsweise mit schönem AJAX), kann er das dann gerne tun. Eine spezielle Lizenz habe ich erstmal nicht festgelegt.

Es war auf jeden Fall mal eine gute Übung um Git auszutesten. Die Dateien mit Passwörtern habe ich natürlich herausgelassen, meinen Webspace möchte ich ja noch eine Weile behalten. ;)

Feeds lesen mit der Owncloud News App

Google Reader ist ja nun schon eine Weile tot. Das hat mich anfangs eigentlich gar nicht so mitgenommen. Ich hatte zwar einen Account dort und auch ein paar Feeds drin, aber so so richtig zum Lesen bin ich nie gekommen.
Ca. im Mai kam dann Owncloud mit einer eigenen News App daher. Sie funktionierte eigentlich von Anfang an recht gut. Nur das Update der Feeds war bisher immer die Archillesferse der App. Entweder man musste andauernd in der Weboberfläche herum klicken um damit den AJAX Cron zum Laufen zu bekommen. Oder mittels http://deine-owncloud.com/cron.php mehrmals den Cronjob anschmeißen. Nach 4 Mal wurde dann endlich auch die Feedupdate Funktion angetriggert.

Wer jetzt sowieso immer nur seine News in der Weboberfläche gelesen hat, konnte dann noch mit dem AJAX Cron leben. So wurden dann eben während dem Lesen die Feeds upgedatet. Doch dann kam die Zeit als ein fröhlicher Entwickler die News-iOS-App hervorbrachte. Nämlich iOC-News. Damit musste dann dringend ein vernünftiger Cronjob her. Nun habe ich die letzten Tage mal wieder ins News-App Repository reingeschaut und festgestellt, dass die News App endlich ein kleines Python Update Skript enthält. Also mal via SSH auf meinen Webspace eingeloggt, Python angeworfen und ausprobiert. Und hurra: Das Skript funktioniert und alle Feeds werden zuverlässig upgedatet. Das ist besonders schön um endlich auch mal auf dem iOS Gerät die aktuellen Feeds zu lesen.

Ich bin ja ein bisschen Binärgewitter geprägt und da wird sehr oft mal Python gelobt. Also was lernen wir daraus. Nimm einfach ein bisschen Magie, stecke es in Python und schon funktioniert alles wunderbar.

Seit gestern läuft das Skript als Cronjob auf meinem Webserver und aktualisiert zuverlässig alle Feeds. Je nachdem wie schön euer Cronjob funktioniert muss man den Update Befehl in eine Datei stecken mit folgendem Inhalt (User und Passwort habe ich weggelassen):

#!/bin/sh
python3 /PFAD_VOM_ROOT/owncloud/apps/news/bin/updater.py --user HIER_DEN_OWNCLOUD_USER_EINTRAGEN --password HIER_DAS_OWNCLOUD_PASSWORT_EINTRAGEN https://deine.owncloud.de

Das Ganze dann als Datei "owncloud.sh" (oder anders, aber die Endung .sh macht Sinn, da es ein Shellskript ist) speichern und im Cronjob Menü eures Hosters eintragen.

Installieren tut man die App ganz einfach über das App-Menü in Owncloud. WICHTIG: Owncloud muss mindestens in Version 5.0.6 oder höher vorliegen.
Da die News App auch öfters mal weiterentwickelt wird, macht es auch Sinn ab und an mal ins App-Menü reinzuschauen und die News App anzuklicken. Wenn dort Update steht, einfach draufklicken. Das Update hat bei mir zumindest die letzten Male reibungslos funktioniert.

Eine genauere Anleitung (auf Englisch, was aber jeder einigermaßen verstehen sollte) gibt es im README. Da sind auch einige Hinweise aufgelistet, die man beachten sollte.

Die iOC News App gibt es im offiziellen Appstore. Die fehlerbereinigte Version aber aktuell auch noch hier. Die Seite des Entwicklers gibt es hier.