Im Editor von WordPress gibt es eine Reihe von Formatierungsmöglichkeiten und Möglichkeiten Inhalte einzupflegen, zum Beispiel Bilder und andere Medien oder oEmbed-Inhalte wie Artikel anderer WordPress-Seiten, Twitternachrichten usw.
Scheinbar gibt es aber auch Bedarf, hin und wieder die eine oder andere Zeile PHP-Code in den Artikel/Seiten-Editor einzugeben, die dann beim Laden der Seite ausgeführt wird. Denn für diesen Zweck gibt es diverse Plugins. Warum das eine ziemlich dumme Idee ist, erläutere ich im heutigen Beitrag zum #projekt52.
Plugins, um PHP im Seiteninhalt auszuführen
Ich verzichte darauf, die einschlägigen „PHP-Ausführungs-Plugins“ hier groß vorzustellen – aus Gründen. Der Vollständigkeit halber möchte ich Sie aber trotzdem nicht unerwähnt lassen. Mir bekannt sind die Plugins Exec-PHP (100.000+ aktive Installationen) und Insert PHP (ebenfalls 100.000+ aktive Installationen). Also sage und schreibe mindestens 200.000 Websites weltweit nutzen solche Plugins bzw. haben zumindest eines installiert und aktiviert.
Es liegt in der Natur der Sache, dass man durch Nutzung solcher Plugins in der Lage ist, beliebiges PHP innerhalb des Artikelinhalts auszuführen. Das bedeutet natürlich auch, dass sich eventuell vorhandener Schadcode entsprechend ausführen ließe.
Aktuelle Angriffe über die REST-API
Und genau das ist in den vergangenen Wochen abertausendfach passiert. Die bereits mehrfach erwähnte Sicherheitslücke in der REST-API erlaubt es Angreifern sehr einfach den Inhalt von Beiträgen anzupassen. Dies führte zuerst nur zu einer massiven Defacement-Attacke. Bald darauf stellten findige Angreifer jedoch fest, dass das Einfügen von PHP-Code über die REST-API-Lücke in den Inhalt der Seite eine tolle Idee sein könnte. Auf all jenen Seiten nämlich, die ein „PHP-Ausführungs-Plugin“ installiert und aktiv haben konnten die Angreifer dadurch beliebigen PHP-Code ausführen und zum Beispiel eine Backdoor installieren und damit dauerhaften Vollzugriff auf den Server erlangen. Das, was man in Bezug auf einen Angriff gerne als Worst-Case-Szenario, also den schlimmsten anzunehmenden Umstand, bezeichnet.
Alternative Lösungsansätze
Verwunderlich ist die Nutzung der obigen Plugins vor allem deswegen, weil es eine einfache, unkomplizierte und deutlich sichere Methode gibt, den gewünschten PHP-Code auf der Seite auszuführen. Dies kann man nämlich genauso gut über Shortcodes erreichen. Und dazu ist noch nicht mal ein Plugin notwendig.
Shortcodes, das sind kleine Befehle, die man in den WordPress-Editor eingeben kann und die dann bestimmte, vorher festgelegte Aktionen ausführen.
So könnte man, falls man das aktuelle Datum und Uhrzeit in der Seite ausgeben möchte, einen Shortcode verwenden, den wir hier mal beispielhaft
[[current_time]]
nennen.
Damit WordPress mit diesem Shortcode etwas anzufangen weiß, müssen wir diesen definieren und hinterlegen, was passieren soll, wenn WordPress diesen Shortcode beim Ausführen der Seite im Inhalt vorfindet.
Ist der Shortcode nicht definiert, passiert auch nichts. Der Text wird einfach ausgegeben, aber keinerlei Anweisung ausgeführt.
Die Shortcode-Definition packt man in ein eigenes kleines Plugin oder in die functions.php-Datei des eigenen Themes (oder Child-Themes, falls man ein externes Theme verwendet).
In unserem Fall sähe das dann folgendermaßen aus:
function shortcode_current_time() { return date('l jS \of F Y h:i:s A'); } add_shortcode('current_time', 'shortcode_current_time');
Mit dem Befehl „add_shortcode“ definiert man, bei welchem Shortcode welche Funktion ausgeführt werden soll. In unserem Fall, wird beim Auftauchen des Shortcodes „current_time“ also die Funktion „shortcode_current_time“ ausgeführt, die vorher definiert wurde.
Mit diesem einfachen Mittel kann sinnvoll und gezielt notwendiger PHP-Code ausgeführt werden und das entsprechende Ergebnis an bestimmten Stellen im Artikelinhalt ausgegeben werden. Ein „PHP-Ausführungs-Plugin“ ist dazu nicht notwendig und stellt ein unglaubliches Sicherheitsrisiko dar!
Fazit
Um es einmal drastisch zu formulieren: wer nicht in der Lage ist, sich seinen eigenen Shortcode zu erstellen, um entsprechende dynamische PHP-Inhalte in der Seite auszugeben, der sollte erst recht nicht auf ein „PHP-Ausführungs-Plugin“ zurückgreifen, um damit Code-Snippets aus dem Internet in die eigenen Seiten einzubetten.
WordPress stellt mit Shortcodes eine flexible und mächtige Möglichkeit zur Verfügung bei der Ausgabe einer Seite dynamische Inhalte zu generieren. Aus meiner Sicht dürften „PHP-Ausführungs-Plugins“ sich gar nicht erst im WordPress-Pluginverzeichnis befinden oder müssten aus Sicherheitsgründen verbannt werden.
danke für den wichtigen Beitrag! An Shortcodes hab ich tatsächlich beim Erstellen meiner ersten Webseite nicht gedacht. Also wieder ein Plugin, das runter kann 🙂
Danke für den Beitrag!
Werde schnellstens php-plugins rausschmeissen und ändern. Bei meines neuen Seite klappt es wunderbar!
Ich hatte mich jetzt gefragt was mache ich mit php in widgets? Denn shortcode in widgest funktioniert ja nicht automatisch. Dafür habe ich gefunden:
diese Zeile
add_filter(‚widget_text‘, ‚do_shortcode‘);
in die functions.php einbauen und schon klappt es mit den Shortcodes auch im Text-Widget 🙂