Wordpress(-Plugin) subster-rejuvenation repariert

Für einen Kunde hatte ich die Aufgabe, eine Wordpress-Installation abzusichern und einen Fehler zu beseitigen. Über die Absicherung kann man streiten, denn eine aktuelle Version sollte trotz meiner erheblichen Bedenken ausdrücklich nicht installiert werden.

So habe ich wenigstens den admin-Bereich (~/wp-admin/) mit einer zusätzlichen, von Wordpress unabhängigen Authentifizierung versehen. Hier stand Aufwand und Ergebnis (Sicherheitsgewinn) in einem, der Ansicht des Kunden nach akzeptablen Verhältnis.

Die Reparatur war dann nicht so einfach:

Zuerst einmal musste herausgefunden werden, warum im Blog die Links zu nachfolgenden Artikel immer auf den aktuellen Artikel verwiesen. Wordpress kam als Fehlerquelle nicht in Betracht, denn dann wäre das Problem bekannter gewesen. Ich bin dann nach einigen Überlegungen zu der Meinung gekommen, dass sehr wahrscheinlich das Plugin "subster-rejuvenation" (also ~/wp-content/plugins/subster-rejuvenation.php) die Quelle des Peroblems darstellt. Bei diesen Plug-Ins hatte ich schon die Erfahrung, dass diese oft genug "Murks" sind.

Ein Blick in den Quelltext hat das dann belegt.

Es fanden sich gleich mehrere Funktionen, bei denen wie in der folgenden eine Zeile (grau) mit logisch uninnigem Befehlen auskommentiert werden musste, dafür mussten dann einige Zeilen (rot) hinzugefügt werden.
function sd_next_posts_link($Prevstr = "« Previous Page") {
  #global $request, $posts_per_page, $wpdb, $max_num_pages, $paged, $table_prefix;
  $wpdb=$GLOBALS['wpdb'];
  $request=$GLOBALS['request'];
  $posts_per_page=$GLOBALS['posts_per_page'];
  $max_num_pages=$GLOBALS['max_num_pages'];
  $paged=$GLOBALS['paged'];
  $table_prefix=$GLOBALS['table_prefix'];
...

Ursache war, dass ohne jede Notwendigkeit Variablen "globalisiert"  wurden.  Diese behalten dann ihre Werte auch außerhalb der Funktion. Ein zunächst einmal mit "unschön" sehr höflich, geradezu euphemistisch bezeichneter "Programmierstil", der dafür sorgt, dass den Programmierern - und hier den Programmierern des Plug-Ins "subster-rejuvenation" - selbst die Übersicht abhanden kommt, welche Variable denn wo gesetzt oder verändert wird. Genau das führte dann zu dem nicht ganz leicht zu findenden Fehler.

Erwartungsgemäß hat Wordpress nach der Behebung, die an mehren Stellen angezeigt war, auch wieder genau so funktioniert wie der Kunde das wollte. Dafür, dass ich nicht bei meiner ursprünlichen Weigerung blieb, den "Murks" zu ersetzen, statt diesen so notdürftig zu flicken und selbst ziemlich unzufrieden, weil mit einem unguten Gefühl im Bauch verblieb, hätte ich einen Zuschlag nehmen sollen. Allerdings hätte der, selbst wenn es ein Zuschlag von 100% gewesen wäre, dem Kunde wahrscheinlich nicht weh getan.

Möglicherweise arbeite ich wohl generell viel zu billig.


Weitere Informationen in diesem Bereich: