Tag: Wordpress

Die Anforderungen steigen – WordPress Plugin List

Noch ist mein Blog nicht ganz fertig, was man vielleicht auch an der einen oder anderen Stelle merkt. Zum Einen fehlen noch die statischen Seiten, die anscheinend vom Template nicht unterstützt werden. Zum Anderen fehlen mir noch ein paar Erweiterungen / Plugins.

Bisher habe ich folgende Plugins installiert:

  • Akismet
  • FeedBurner FeedSmith
  • Google XML Sitemaps
  • iG:Syntax Hiliter
  • Marekkis Watermark-Plugin
  • Post Teaser
  • Post to PDF
  • Simple Tags
  • WP lightbox 2

Wie bereits oben erwähnt fehlt mir noch ein Glossar Plugin. So wie es im Moment ausschaut, werde ich dieses wohl selber programmieren müssen, weil es bisher noch nichts fertiges für WordPress gibt. Wie dies genau abläuft werde ich im Blog berichten.

Außerdem hätte ich gerne noch ein Plugin, welches einen direkten Zugriff auf meine Downloaddateien verhindert oder entsprechend korrigiert und protokolliert. In der WordPressgemeinde scheint es dafür bisher kein Bewusstsein zu geben und dem entsprechend auch kein Plugin, von daher wird dieses wohl auch selber programmiert werden müssen.

Sollte jemand entsprechende Plugins kennen, die bereits eine entsprechende Funktionalität zu den obigen Themengebieten bieten, wäre ich für einen Kommentar dankbar.

WordPress 2.6.5 is available! Please update now.

Gestern Nachmittag hatte ich bei Securityfocus erst die Anzahl von Vulnerabilities zwischen Typo3 und WordPress verglichen. Typo3 kam auf zwei Seite, WordPress auf drei. Wobei viele Meldungen auf Typo3 Extensions entfallen. WordPress hat diesen Bonus nicht.

Bevor ich jetzt jedoch die ganze Update Prozedur starte, habe ich mir die Unterschiede zwischen WordPress 2.6.3 und WordPress 2.6.5 angeschaut. Die WordPress Version 2.6.4 wurde übersprungen, da es wohl eine Fake Version gab.

Das Update würde insgesamt nur 5 Dateien betreffen. Dafür den Aufwand treiben, die Datenbank zu sichern, alles löschen, das ganze WordPress Paket einspielen, ist mir zu aufwendig. Ich werde es händisch machen und mir dabei gleich mal die Fehler anschauen.

In einer Datei wird bloß die Versionsnummer hochgezählt. Manche Blogs behaupten, das Technorati Blogs aus dem Index schmeißt, die eine ältere WordPressversion verwenden, wie alt diese jedoch sein muß konnte ich bisher nicht herausfinden. Prinzipiell ist dies jedoch für mich ein Schwachstelle, wenn man “von außen” herausfinden kann, auf welcher Version ein System läuft. Dadurch wird es dem Angreifer umso leichter gemacht, den richtigen Hebel auszuwählen um anzusetzen.

Schauen wir uns einen weiteren Fehler an. Dies soll keine Klugscheißerei werden, denn die kann keiner leiden, aber nur aus Fehlern lernt man.

[php]
// File: /wp-admin/users.php

129 129 $go_delete = false;
130 130 foreach ( (array) $userids as $id ) {
131 $id = (int) $id;
131 132 $user = new WP_User($id);
132 133 if ( $id == $current_user->ID ) {
[/php]

Zeile 5 bzw. 131 ist neu. Bevor die Variable $id an WP_User übergeben wird, wird sie nach int gecasted. Dies ist auch sinnvoll, denn ursprünglich kommt das Array direkt aus einem Formular und nicht etwa aus der Datenbank.
Was mir jedoch nicht ganz schlüssig ist, warum wird der Cast nicht direkt in der Methode gemacht? Die Methode wird bestimmt noch an mehreren Stellen aufgerufen und man sollte der Methode die Verantwortung übertragen, sicherzustellen, das nur die richtigen Werte übertragen werden.

Betrachten wir noch eine weitere Lücke, die verdeutlichen soll, warum PHP Anwendungen so anfällig sind. In Programmiersprachen wie Java oder JavaScript wäre der Fehler schon von Anfang an aufgefallen.
Sehen wir uns zuerst den alten Code an:
[php]
// File: /wp-includes/feed.php

498 echo ‘http’
499 . ( $_SERVER[‘https’] == ‘on’ ? ‘s’ : ” ) . ‘://’
500 . $_SERVER[‘HTTP_HOST’]
501 . wp_specialchars(stripslashes($_SERVER[‘REQUEST_URI’]), 1);
[/php]

Und nun die Neue:

[php]
// File: /wp-includes/feed.php

498 $host = @parse_url(get_option(‘home’));
499 $host = $host[‘host’];
500 echo clean_url(
501 ‘http’
502 . ( (isset($_SERVER[‘https’]) && $_SERVER[‘https’] == ‘on’) ? ‘s’ : ” ) . ‘://’
503 . $host
504 . stripslashes($_SERVER[‘REQUEST_URI’])
505 );
[/php]

Bevor jetzt also geprüft ob der $_SERVER[‘https’] == ‘on’ wird erstmal überprüft ob die Variable ob überhaupt gesetzt ist. Wenn die Variable nicht gesetzt ist, macht es auch keinen Sinn zu überprüfen ob sie on ist. Sollte die erste Bedingung bereits fehlschlagen wird sofort abgebrochen. Dafür sorgt das &&.

WordPress – Typo3 im Vergleich

Der Stillstand des Blogs hing unter anderem damit zusammen, dass mich die vielen Sicherheitslücken genervt haben. Ich habe nicht die Zeit und Lust meinen Blog jede Woche zu aktualisieren oder mit der Angst leben zu müssen, dass mein Blog gehackt wird.

Deshalb hatte ich mich in der Zwischenzeit gefragt ob Typo3 nicht die bessere Alternative wäre. Obwohl ich mit Typo3 auskenne und mein Server entsprechend konfiguriert ist, habe ich mich für die bestehende WordPress Installation entschieden.

Dies lag vor allem daran, das ich erkannt habe, WordPress ist fürs Bloggen gemacht. Mit Typo3 kann man auch bloggen jedoch sind dafür Erweiterungen nötig, die auch wieder konfiguriert werden möchten.

Ein weiterer Schwachpunkt ist das Design. Es gibt sowohl für Typo3 als auch für WordPress genug freie Themes und Templates. Jedoch sind die in Typo3 schwieriger einzubinden und nun auch nicht unbedingt für Webseiten mit Kommentarfunktion gedacht.

Die Funktionsvielfalt von Typo3 vermisse ich jetzt schon. Besonders die Funktionalität mehrere Inhaltsspalten zur Verfügung zu haben. WordPress ist nun mal wirklich nur zum Bloggen gedacht und nicht um Inhalt zu verwalten wir ein Content Management System – Typo3.

[random_content group_id=”211″ num_posts=”1″]

Kommentar-Spam vs. tantan – Call to undefined function wp_die();

Der Preis des Erfolges eines jeden Blogs scheint der Spam zu sein. Nachdem ich meinen Server nun auch endlich wieder richtig konfiguriert hatte, bekam ich auch wieder die vielen Mails. Google Mail gruppierte diese zwar alle schön, aber es hat mich trotzdem genervt, vor allem weil es so leicht schien, Spam von nicht Spam zu unterscheiden. Nach einer kurzen Suche mit einer Suchmaschine stieß ich auf folgende Seite http://tantannoodles.com/toolkit/spam-filter/. Ich konnte es kaum glauben, das man das Plugin nur installieren mußte und nicht wie beim Captcha wieder in alle möglichen PHP Dateien eintragen mußte.

Nachdem ich es installiert hatte, stand auch gleich der erste Versuch an. Ich kopierte einfach den Spam Text, von dem ich per Mail haufenweise hatte, in das Comment Feld und bekam folgende Fehlermeldung

[php]
Fatal error: Call to undefined function wp_die() in wp-content/plugins/tantan/spam-filter.php on line 201
[/php]

Da machte sich natürlich gleich Ernüchterung breit. Also versuchte ich es mit einem richtigen Kommentar und siehe da, es funktionierte. Jetzt tat sich natürlich der innerliche Konflikt auf, was sollte man tun. Den Fehler so lassen oder nachschauen was da nicht funktioniert. Aber da wir ja hier schließlich beim BugBlog.de sind, dachte ich mir, ich schaue mir den Fehler mal an und mache daraus einen Post, weil anderen ergeht es bestimmt genauso.

Also in der entsprechenden Datei an entsprechender Stelle nachgeschaut und folgendes gefunden
[php]
$html .= ‘

< go back and edit my comment

‘;
$html .= ‘

‘;
wp_die($msg . $html);
[/php]

Da die Programmierung der Objekt Orientierung gefolgt ist, hätte es eigentlich so lauten müssen:
[php]
$this->wp_die($msg . $html);
[/php]

Dies ergibt aber auch keinen Sinn, weil wir befinden uns bereits in der Methode wp_die und eine Methode die sich nochmal selbst aufruft ohne Abbruchbedingung benötigt den ganzen Speicher und wird somit vom Server beendet. Also blieb nur noch eine Möglichkeit übrig:

[php]
die($msg . $html);
[/php]

Noch kurz gespeichert und schon bekommt der Kommentator die Möglichkeit, seinen Kommentar freizuschalten oder doch nochmal zu überarbeiten.