Fotostrecke

WordPress: So sichern Sie die Blog-Software

WordPress So sichern Sie die Blog-Maschine ab

WordPress ist als Blog-Software sehr beliebt - schließlich fallen Installation und Bedienung auch Einsteigern leicht. Aber wer tiefer einsteigen, das System sichern und die Vorlagen verändern will, muss sich etwas mehr Mühe geben. Das Fachmagazin "c't" erklärt, wie es geht.
Von Vladimir Simovic

WordPress ist ein weit verbreitetes und komplexes Content Management System (CMS). Das macht es zum attraktiven Ziel für kriminelle Zeitgenossen. Bereits einige einfache Maßnahmen erhöhen die Sicherheit einer WP-Installation deutlich.

Das beginnt bei der Datenbank, in der WP die Seiteninhalte ablegt. Standardmäßig nutzt das System als Tabellenpräfix "wp_"; nach der Installation heißen die Tabellen etwa "wp_options" oder "wp_posts". Angreifer, die versuchen, die SQL-Datenbank zu manipulieren, wissen also, wonach sie suchen müssen. Ein selbst gewähltes Präfix wie "peters_blog_" verbessert die Sicherheit. Das Tabellenpräfix ist in der Konfigurationsdatei (wp-config.php) definiert:

$table_prefix = 'wp_';

Am besten ändern Sie es schon während der Installation, wenn Sie in der Konfigurationsdatei sowieso die Datenbanknamen eintragen müssen. Nach dem Anlegen der Datenbank wird die Änderung schwieriger; dann müssen Sie zusätzlich die bereits angelegten Tabellennamen ändern. Falls Ihr Hoster phpMyAdmin zur Datenbankverwaltung bereitstellt, ist aber auch das nicht besonders schwierig: Sie öffnen die Datenbank und klicken in der Zeile der ersten Tabelle auf das Icon für die Aktion "Struktur" und dann auf das Tab "Operationen", um im Fensterbereich "Tabellenoptionen" die Tabelle umzubenennen. Das wiederholen Sie für jede Tabelle in der Datenbank.

Auch wenn man ab Version 3.0 schon bei der Installation den Namen für das Admin-Konto ändern kann, so würde ich Ihnen dennoch empfehlen, nach der Installation ein neues anzulegen und den Standard-Admin zu löschen. Denn der hat trotz Namensänderung weiterhin die ID 1. Mit dem Erstellen eines neuen Admins generieren Sie auch eine neue ID und dieses Abweichen vom Standard trägt zur Sicherheit bei. Der Neue heißt natürlich nicht "admin" und erhält ein starkes Passwort.

Achten Sie darauf, dass der Benutzername des Admin nicht als Anzeigename im Frontend (Öffentlicher Name) fungiert - das ist leider Standardeinstellung - weil mögliche Angreifer dann den neuen Login-Namen des Administrators erkennen können. Tragen Sie im Profil des Admin-Kontos stattdessen einen Spitznamen als öffentlichen Namen ein.

Über die .htaccess-Datei im WordPress-Verzeichnis können Sie sehr einfach unerlaubte Zugriffe auf die Konfigurationsdatei "wp-config.php" blocken. Einfach folgenden Code in die .htaccess-Datei eintragen, die sich im selben Verzeichnis wie "wpconfig. php" befindet:

Die Anmeldung als Admin sollte über eine verschlüsselte SSL-Verbindung erfolgen. Etliche Hoster bieten ihren Shared-Webhosting-Kunden dafür kostenlos einen SSL-Proxy. Läuft WordPress beispielsweise unter der Adresse "http://meinedom.xx" und ist der SSL-Proxy des Hosters unter "https://sslproxy.xx" erreichbar, können Sie sich über "https://ssl-proxy.xx/meinedom.xx/wp-login.php" abhörsicher anmelden.

Falls Ihr Webhoster im Apache das Modul "mod_rewrite" aktiviert hat, empfiehlt es sich, eine Umleitung einzurichten, um nicht immer die lange Anmeldeadresse mit dem Proxy eingeben zu müssen. Das geht über die .htaccess-Datei im Verzeichnis, in dem "wp-login-php" liegt:

# Umleitung zum SSL-Login
RewriteEngine on
RewriteRule admin$ https://ssl-proxy.xx/meinedom.xx/wp-login.php

Dann reicht die Eingabe von "meinedom.xx/admin" für eine gesicherte Anmeldung.

Verschiedene Nutzerkonten einrichten

WordPress enthält eine einfache Benutzerverwaltung, die Konten in Gruppen mit unterschiedlichen Rechten verwaltet. So kann nur der Admin Themes und Plug-ins installieren oder Benutzerkonten anlegen. In einem Gruppenblog müssen nicht alle, die mitschreiben, gleich zur Admin-Gruppe gehören. Auch der Admin selbst sollte sich einen Redakteur-Account zulegen, den er etwa zum Bloggen von unterwegs nutzt.

Unter "Einstellungen/Allgemein" im Backend finden Sie die Option "Jeder kann sich registrieren". Damit ermöglichen Sie den Besuchern Ihrer WordPress-Installation, sich selbstständig als Abonnent (registrierter Leser) anzumelden. Leider war diese Funktion in der Vergangenheit ein paar Mal das Ziel von Angriffen; lassen Sie sie daher besser ausgeschaltet.

Das Plug-in "Limit Login Attempts" schränkt Login-Versuche für den Admin-Bereich ein und berücksichtigt dabei auch Anmeldeversuche via Cookie Authentication. So lassen sich Brute-Force-Angriffe verhindern, bei denen Anmeldename und Passwort durch endloses Ausprobieren erraten werden.

Man legt dazu fest, wie viele Login-Versuche von einer IP-Adresse innerhalb eines vorgegebenen Zeitraums scheitern dürfen, bevor von dieser Adresse für einige Zeit kein Login mehr möglich ist. Nach mehreren Sperren setzt das Plug-in die IP-Adresse für noch längere Zeit auf die schwarze Liste. Alle Parameter lassen sich ändern, etwa auch, wie lange ein Fehlversuch gespeichert wird oder ob der Admin E-Mails über Sperrungen erhält.

Doch Vorsicht: nicht jedes Plug-in verbessert die Sicherheit von WordPress - im Gegenteil. Es ist recht einfach, eine Erweiterung zu entwickeln, und nicht jede stammt von einem erfahrenen Programmierer, der sich auch Gedanken über Sicherheit macht. Daher beschränken Sie sich bei der Suche nach Word-Press-Plug-ins besser auf das offizielle Verzeichnis. Hier ist die Chance groß, dass die Community eventuelle Fehler in einem der Skripte schnell entdeckt. Die Anzahl der Downloads und die Bewertungen liefern Ihnen zusätzlich ein Qualitätsmerkmal, ebenso die letzten zehn Forenbeiträge, die auf der Übersichtsseite jedes Plug-ins verlinkt sind.

Noch ein zweiter Grund spricht dafür, Plug-ins mit Bedacht einzusetzen: die Performance des WordPress-Systems. Wenn Sie zu viele Plug-ins installieren, können sich die Erweiterungen in die Quere kommen und das CMS verlangsamen. Es ist ähnlich, als ob man Dutzende von Windows-Programmen installiert, sie im Autostart-Ordner lässt und dann irgendwann mal feststellt, dass Windows langsamer geworden ist.

Vorlagen erstellen

Läuft das CMS rund und sicher, können Sie das Aussehen Ihrer künftigen Website in Angriff nehmen. Bestimmt wird dieses von einer Layout-Vorlage, die für alle Seiten gilt und bei WordPress "Theme" heißt. Durch Änderungen am Theme oder den Wechsel zu einem anderen, verändert man das Aussehen der Website, ohne den Inhalt bearbeiten zu müssen. Um selbst ein Theme zu erstellen oder bestehende anzupassen, benötigt man gute Kenntnisse in (X)HTML und CSS sowie grundlegende in PHP.

Im Dateisystem des Servers liegt jedes Theme in einem Verzeichnis unterhalb von "wp-content". Innerhalb des jeweiligen Themes-Ordners befinden sich die Template-Dateien und eventuell weitere Unterordner etwa für Bilder. Jede Template-Datei hat eine andere Funktion; einige müssen auf jeden Fall vorhanden sein und andere sind optional.

Die Template-Dateien teilen sich in drei Gruppen auf. Zum einen sind das Dateien, die zum Einsatz kommen, wenn ein bestimmter Zustand abgefragt wird: Auflistung der Suchergebnisse oder Ansicht einzelner Beiträge. Eine zweite Gruppe enthält Template-Dateien, die lediglich dazu dienen, Code auszulagern, wie "header.php" für den einheitlichen Kopfbereich der Seiten. In die dritte Gruppe fallen alle restlichen Dateien wie "screenshot.png", die lediglich dazu dient, im Admin-Bereich die Auswahl von Themes zu erleichtern.

Wenn Sie Inhalte in die Auslagerungsdateien (header.php, sidebar.php, comments.php und footer.php) packen, dann müssen Sie diese in jeder Template-Datei, die sie anzeigen soll, nachladen. Dazu gibt es spezielle Include-Tags:

Solange sie die Auslagerungsdateien im dafür vorgesehenen Ordner belassen, müssen Sie sich keine Gedanken um Pfade und Dateinamen machen. Mit der Include-Anweisung von PHP können Sie auch eigene Template-Dateien in die offiziellen einbinden:

Die Konstante TEMPLATEPATH enthält die absolute Adresse des Theme-Ordners auf dem Server. Wenn die eigenen Dateien in einem Verzeichnis darunter liegen, muss dieses angegeben werden. Außerdem müssen die selbst geschriebenen Dateien anders heißen als die offiziellen Template-Dateien: "header.php" ist tabu, "kopfzeilen.php" geht.

Ausgabe auf Befehle definieren

Template-Tags sind Code-Schnipsel beziehungsweise PHP-Funktionen, die WordPress anweisen, entweder etwas zu tun oder einen bestimmten Inhalt beziehungsweise bestimmte Informationen anzuzeigen. Die meisten der weit über hundert Tags werden Sie sehr wahrscheinlich kaum nutzen. In diesem Beispiel

kommen innerhalb des title -Elements zwei Template-Tags zum Einsatz. Das erste kommt mit einem Parameter daher und gibt den Namen der WordPress-Installation aus. Das zweite liefert den Titel des aktuellen Artikels beziehungsweise der aktuellen Seite.

Wenn Sie ein bestehendes Theme bearbeiten, sollten Sie darauf achten, die Template-Hooks nicht zu löschen. Einige Plug-ins benötigen solche Hooks, damit sie richtig funktionieren. Man kann sich die Funktion der Hooks auch bildlich als "Haken" vorstellen, die den Plug-ins einen Punkt bieten, an dem sie sich einklinken können.

So kann das Plug-in "Bad Behavior" im Fußbereich von Seiten eine Statistik der von ihm geblockten Spam-Versuche anzeigen. Dazu muss die Template-Datei "footer.php" aber auch den Hook

enthalten. Sie finden ihn im mitgelieferten Classic-Theme ebenso wie dieses Beispiel:

Dieser Hook befindet sich beim Formular für Kommentare in der Template-Datei "comments.php". Hier könnte sich beispielsweise ein Plug-in einklinken, das eine Vorschau des Kommentars anzeigt.

Bei den Conditional-Tags handelt es sich um Code-Fragmente, die eine Bedingung aufstellen: "Wenn dies und das erfüllt ist, dann handle so und so." Angenommen, Sie erstellen ein WordPress-Theme und wollen nur auf der Startseite etwas einblenden:

Dies erscheint nur auf einer statischen Seite (auch Page genannt):

Sie haben auch die Möglichkeit, Conditional-Tags bestimmte Parameter mitzugeben:

In diesem Fall stellen Sie als Bedingung, dass eine Seite den Titel "Impressum" trägt. Sie können die Bedingungen auch durch logische Operatoren (||, &&, !, xor) verknüpfen:

Hier wird als Bedingung "entweder Archiv oder Suchergebnis" gestellt. Mit den Conditional-Tags kann man die Position im Weblog abfragen und davon abhängig unterschiedliche Elemente ausgeben. So lässt sich zum Beispiel die Seitenleiste mit verschiedenen Bildern schmücken, je nachdem, ob es sich um die Startseite, eine andere Seite oder einen Einzelbeitrag handelt.

Der Loop bestimmt, wie das Blog aussieht

Der Loop ist dafür zuständig, dass die Beiträge und die Inhalte einer Seite überhaupt ausgegeben werden. Er wird dazu in der Datei "index.php" und in jeder Template-Datei eingebunden, in der eine Ausgabe erfolgt, etwa in "page.php" und "single.php".

Innerhalb des Loop sind Bereiche untergebracht, die in jedem Beitrag vorkommen sollen: Überschrift des Beitrags (Listing unten, Zeile 10), Anzahl der Kommentare (Zeile 19), Verweis zum Kommentarbereich (ebenfalls Zeile 19), der eigentliche Beitrag (Zeile 14) und so weiter.

Der Loop in der Datei "indes.php" des Classic-Themes von WordPress

Der Loop in der Datei "indes.php" des Classic-Themes von WordPress

Die Template-Datei "page.php" steuert die Ausgabe der Seiten. Um Sie zu erstellen, kopieren Sie die Datei "index.php" im vorhandenen Theme, benennen sie um und passen sie an Ihre Bedürfnisse an, indem Sie beispielsweise den Kommentarbereich entfernen.

Angenommen, Ihre page.php unterscheidet sich vom Haupt-Template (index.php) dadurch, dass Sie bei der Ausgabe der Seiten die Informationen unter der Beitragsüberschrift

nicht anzeigen lassen möchten, dann löschen Sie logischerweise diesen Bereich in page.php.

Wenn Sie mehrere Seiten erstellt haben, könnte es sein, dass Sie beispielsweise im Impressum diesen Bereich doch eingeblendet haben wollen. Dann öffnen Sie die Datei page.php in einem Texteditor und speichern sie als "impressum.php" in demselben Ordner ab. Danach fügen Sie in dieser neuen Datei ganz am Anfang folgenden Kommentar-Prolog ein:

Es handelt sich hierbei um einen PHP-Kommentar, der dem System signalisiert, dass es sich um ein Seiten-Template handelt. Dann fügen Sie die Befehle, die Sie in page.php gelöscht hatten, aus der index.php wieder ein, speichern die Datei ab und laden sie hoch. Nun haben Sie beim Erstellen einer Seite im Bereich "Attribute" die Möglichkeit, dieser über das Pull-down-Menü "Template" das Template "Impressum" zuzuweisen.

Verschiedene Sprachversionen nutzen

Viele Themes sind nur in englischer Sprache zu finden oder die deutsche Übersetzung passt nicht zur eigenen Website. Die Erstellung oder Anpassung einer Übersetzung ist aber prinzipiell kein Problem, da WordPress-Themes die GNU-Internationalisierungsbibliothek "gettext" nutzen.

Solange der Autor im Unterordner "languages" des Themes eine Datei mit der Endung ".po" oder ".pot" mitliefert, können Sie loslegen. Wenn Sie eine dieser Dateien im Texteditor öffnen, sehen Sie schon alle Texte im Klartext. Doch diese dort zu ändern, nützt gar nichts.

Sie benötigen ein Programm namens Poedit, um die Übersetzung oder die Texte zu ändern. Es öffnet eine Katalogdatei (.po) mit einer bestehenden Übersetzung oder legt aus einem Portable Object Template (.pot) mit dem originalsprachigen Muster einen neuen Katalog an. Der Editor zeigt dann alle Texte des Themes als Pärchen an und Sie können sich an die Übersetzung machen.

Dabei können die Texte länger oder kürzer ausfallen als in der Ausgangssprache. Teilweise enthalten sie Platzhalter und Anweisungen, die Sie nicht antasten sollten. Wenn Sie fertig sind, speichern sie den Katalog. Dabei erzeugt Poedit eine neue Datei mit der Endung .mo. Dieses sogenannte Machine Object enthält die Übersetzung und wird von WordPress zur Seitenausgabe genutzt.

Der Einstieg für Gestalter

Für den Anfang würde ich empfehlen, sich an dem Classic-Theme zu orientieren. Es war bis Version 1.2 das Standard-Theme und bis zur Version 2.9 gehörte es zum Umfang von WordPress. Das aktuelle Standard-Theme mit dem Namen Twenty Ten setzt zwar neue Maßstäbe, ist aber für Themes-Entwickler, die noch am Anfang stehen, zu viel des Guten. Dagegen bietet das Classic-Theme mit seiner einfachen Struktur und dem übersichtlichen Code einen guten Einstieg.

Um später ein eigenes Theme umzusetzen, erstellen Sie von Ihrem bestehenden Layout ein HTML-Template, das möglichst alle Zustände abdeckt: Übersicht, Einzelansicht, Kommentarbereich et cetera. Zerteilen Sie dieses HTML-Template in die einzelnen Bestandteile und benennen Sie sie entsprechend: Der Kopfbereich wird zu "header.php", der Fußbereich zu "footer.php" und so weiter. Die CSS-Datei sollte style.css heißen.

Die Auflistung der Template-Tags im offiziellen Verzeichnis wird für Sie eine sehr wichtige Anlaufstelle sein, daher sollten Sie sich entweder ein Lesezeichen anlegen oder noch besser die Firefox-Erweiterung "WordPress Helper" installieren. Sie ist für Entwickler von Themes eine sehr wichtige Erweiterung, da sie unter anderem wichtige Links zu der offiziellen Dokumentation enthält. Die Auflistung der Template-Tags, Conditional-Tags und der Hooks ist dann nur zwei Klicks entfernt.

Gefunden in: Themenheft "Webdesign"  vom Computermagazin c't
© c't Heise Zeitschriften Verlag