Copying sources and texts (also in parts) for publishing without our permission is NOT ALLOWED. We are fed up with finding our work on other sites (like stackoverflow).
Das Kopieren von Quellcode und Texten (auch in Auszügen) ist nicht erlaubt. Wir haben es gründlich satt, unsere Arbeit auf anderen Webseiten zu finden.

Copying for non-public usage is allowed.           Das private Kopieren und Benutzen ist natürlich erlaubt und erwünscht.

Kategorie "Wordpress"

05. Aug
Teaser

WordPress: Die readme.html Datei blocken

WordPress hat schon lange die unbeachtete Sicherheitslücke mit der eigenen “readme.html” Datei.

Das wird bei den Veröffentlichungen (Updates) wohl auch keiner vom WordPress Team mehr lernen: Solche Details geben Angreifern wertvolle Informationen über das eingesetzte System, die eingesetzte Version (denn auch die readme Datei ändert sich von Zeit zu Zeit) und somit mehr Möglichkeiten des Angriffes. Der Inhalt solcher Dateien ist für den Webseitenbetreiber ggf. interessant; jeden anderen gehen solche Details nichts an.

Lösung:
Sperren Sie selbst in der .htaccess Datei den Zugriff auf diese Datei:

RewriteCond %{THE_REQUEST} /readme\.html[?/\s] [NC]
RewriteRule ^ - [R=404,L]

Danach wird dem Benutzer für diese Datei ein 404 Fehler (“Datei nicht gefunden”) angezeigt.

28. Aug 2014
Teaser

WordPress: Verbergen von Benutzernamen und ID Zuordnung (WordPress User IDs and User Names disclosure)

Wenn man bei einer WordPress Webseite die URL “http://www.example.com/?author=1? angibt, dann erhält man eine Liste der Artikel des entsprechenden Benutzers und seinen Namen.

Das klingt auf den ersten Blick nicht sonderlich schlimm – erlaubt jedoch die Zuordnung der Benutzernamen und das Zuordnen dieser Namen zur internen Benutzer ID.

Aber: Das zeigt auf, dass …

  1. die Benutzer-IDs generisch (fortlaufend) erzeugt werden und man dadurch herausfinden kann, wieviele Benutzer auf der WordPress Installation arbeiten
  2. eine Benutzer-ID vergeben / aktiviert ist
  3. durch die Umleitung Schwachstellen entstehen können

Diese Schwachstelle in WordPress kann durch eine Ergänzung in der .htaccess Datei gesperrt werden:

1
2
RewriteCond %{QUERY_STRING} author=\d
RewriteRule ^ /? [L,R=301]

Diese Ergänzung leitet entsprechende Anfragen auf die Startseite (bzw. das Rootverzeichnis) des Webservers um. Die Daten können auf diese Weise nicht ausgelesen werden.

 
25. Jul 2014
Teaser

WordPress und die Sicherheit

Wir bieten derzeit ein paar WordPress Plugins an und freuen uns über die positive Resonanz und aktive Nutzung durch unsere Kunden. Aber neuerdings versucht das WordPress Team, neue Plugins nach individuellen Richtlinien zu prüfen. An sich ist eine solche Prüfung eine gute Sache und längst überfällig. Wenn jedoch jeder freiwillige WordPress Helfer (also “Mitarbeiter”) seinen eigenen und dann noch flexiblen Wunsch-Maßstab ansetzt – dann wird eine effektive Prüfung Glückssache.

Genau in diesem Dilemma befinden wir uns derzeit mit unsererm neuesten Plugin “Abuse Protector” für WordPress.

Es schützt WordPress Systeme vor den steigenden, nervigen und teils riskanten Bot-Angriffen. Dabei gibt es diverse Angriffsmuster. Bemerkt unser Plugin einen solchen Angriff, meldet es diesen sofort an unsere Datenbank … nicht mit dem Namen der Webseite sondern zum Schutz mit einem Schlüssel (API Key) kodiert. Dadurch können alle anderen Seiten mit unserem Plugin beim ersten Besuch einer solchen IP diesen Zugriff direkt blockieren – natürlich profitiert jeder davon. Denn ein Angriff in Kapstadt kann nach wenigen Sekunden auch Ihren Blog schützen.

Und WordPress ? Man hat uns untersagt, das Plugin mit dem folgenden Lizenzzusatz zu vertreiben:

“Die kommerzielle Nutzung und Verbreitung ist untersagt”

WordPress: “Das müsse man jedem erlauben.”

Das sehen wir anders, denn wir haben das Plugin in unserer Freizeit erarbeitet und wir sehen es partout nicht ein, dass eine Firma damit Geld macht und Sie als unseren Kunden ggf. dafür zahlen sollen. Zudem soll das Plugin den API-Key nicht automatisch bei der Installation erzeugen. Man fordert, dass unserere Kunden sich bei uns extra registrieren und sich einen API-Key manuell abholen oder zuschicken lassen. Dann soll der Key in dem Plugin manuell eingetragen werden. Der Weg sei besser (sagt das WordPress Team).

Das finden wir garnicht, denn (neben dem Zusatzaufwand für unsere Kunden):

  • Was passiert denn bei einem Fehler beim Aptippen des API-Keys ?
  • Oder beim fehlerhaften Kopieren des Keys (z.Bsp. Vergessen des letzten Zeichens) ?

Wir müssten dann sofort jeden Key mit unserem Server verifizieren und unsere Kunden um Korrektur bitten … viel zu viel Aufwand für ein einfaches Plugin, oder ? Wer soll denn diesen Aufwand (zusätzliche bereiche auf unserer Webseite) programmieren, pflegen und schützen ? Wir ? Klar. Aber das System ist kostenlos und wir haben auch nicht alle zeit der Welt für kostenlose Plugins und Arbeiten.

Fazit: Wir werden das Plugin nur auf unserer Seite anbieten und nicht auf WordPress.

Zudem bauen wir das Plugin um für andere CMS Systeme … denn dort hat man Interessen an unserem System.

09. Jun 2014
Teaser

WordPress: Verbergen von Benutzernamen und ID Zuordnung (WordPress User IDs and User Names disclosure)

Wenn man bei einer WordPress Webseite die URL “http://www.example.com/?author=1” angibt, dann erhält man eine Liste der Artikel des entsprechenden Benutzers und seinen Namen.

Das klingt auf den ersten Blick nicht sonderlich schlimm – erlaubt jedoch die Zuordnung der Benutzernamen und das Zuordnen dieser Namen zur internen Benutzer ID.

Aber: Das zeigt auf, dass …

  1. die Benutzer-IDs generisch (fortlaufend) erzeugt werden und man dadurch herausfinden kann, wieviele Benutzer auf der WordPress Installation arbeiten
  2. eine Benutzer-ID vergeben / aktiviert ist
  3. durch die Umleitung Schwachstellen entstehen können

Diese Schwachstelle in WordPress kann durch eine Ergänzung in der .htaccess Datei gesperrt werden:

RewriteCond %{QUERY_STRING} author=\d
RewriteRule ^ /? [L,R=301]

Diese Ergänzung leitet entsprechende Anfragen auf die Startseite (bzw. das Rootverzeichnis) des Webservers um. Die Daten können auf diese Weise nicht ausgelesen werden.

08. Mrz 2014
Teaser

WordPress: Automatische Zeilenumbrüche verhindern (<p> und <br>)

WordPress ergänzt nur allzu gerne den HTML Code einer Seite oder eines Artikels mit Zeilenumbrüchen und Absätzen. Im Großteil der Fälle mag diese Technik entweder unbemerkt oder gar hilfreich sein – es gibt aber auch Seiten, auf denen dieses Verhalten stört.

Um dieses Verhalten in WordPress zu deaktivieren, fügen Sie die folgenden beiden Zeilen einfach in die “functions.php” in Ihrem Layout (“theme”) ein:

remove_filter("the_content", "wpautop");
remove_filter("the_excerpt", "wpautop");
26. Jul 2012
Teaser

WordPress: “Für kurze Zeit nicht verfügbar um eine regelmäßige Instandhaltung durchzuführen. Prüfe in einer Minute nochmals.”

Wenn Sie beim Update Ihrer WordPress (WP) Installation diese Meldung erhalten, bzw. auf dem Bildschirm nurnoch diese Meldung sehen, folgen Sie einfach den u.a. Schritten:

Für kurze Zeit nicht verfügbar um eine regelmäßige Instandhaltung durchzuführen.
Prüfe in einer Minute nochmals.

bzw.

Briefly unavailable for scheduled maintenance. Check back in a minute.

Einfache Möglichkeit

Löschen Sie im Hauptverzeichnis Ihrer WordPress Installation die Datei “.maintenance”:

rm pfad/.maintenance

Danach können Sie sich (meist) wieder im Backend Ihrer WP-Webseite anmelden und das Update manuell erneut starten oder beenden.

Sichere Lösung

Installieren Sie die aktuelle Version (das Update) manuell auf Ihrem WebServer neu:

  1. Dafür laden Sie sich die aktuelle Version von der WordPress Seite herunter:
    http://de.wordpress.org
    http://www.wordpress.org
  2. Entpacken Sie das Archiv (ZIP oder TAR.GZ) auf Ihrem Computer
  3. Verbinden Sie sich per FTP mit Ihrem WebServer
    z.Bsp. mit FileZilla
  4. Laden Sie die entpackten Dateien in das WP Verzeichnis auf Ihrem WebServer
  5. Rufen Sie Ihren Backenbereich auf:
    http:/ihre-webseite.de/wp-admin
  6. Meist müssen Sie hier (einmalig) dem Update der WP-Datentabellen zustimmen
  7. Fertig
28. Sep 2010
Teaser

WordPress: Deine PHP-Installation scheint nicht über die von WordPress benötigte MySQL-Erweiterung zu verfügen

Beim Aufruf Ihrer Webseite erhalten Sie folgende Meldung ?

Deine PHP-Installation scheint nicht über die von WordPress benötigte MySQL-Erweiterung zu verfügen.

Prüfen Sie bitte, ob auf Ihrem Server die folgenden Programme (Module) richtig installiert sind:

  • PHP
  • mySQL
  • php5-mysql

Sollte z.Bsp. “php5-mysql” fehlen, dann können Sie unter Debian mithilfe des Befehles “apt-get install php5-mysql” dieses Modul nachinstallieren. Anschließend sollte Ihre Webseite (wieder) richtig funktionieren.

06. Aug 2010
Teaser

WordPress: Revisionen eines Artikels löschen (Historie löschen)

Das CMS “WordPress” stellt Ihnen Ihre alten Versionen der Artikel zur Verfügung. Unter jedem Artikel können Sie im Abschnitt “Revisions” jede (gespeicherte) Änderung des Artikels nachvollziehen und auf Wunsch mit einer anderen Version des Artikels vergleichen lassen.

Diese manchmal recht praktische Funktion kann jedoch auch unerwünscht sein und ggf. Datenbank-Ressourcen belegen. Zugegeben, es sind keine sehr großen Datenmengen – jedoch kann mit der Zeit und entsprechend vielen Artikeln auch hier eine stattliche Anzahl an Datenbankeinträgen zusammen kommen.

Um hier aufzuräumen und diese alten Datensätze endgültig zu löschen, nutzen Sie folgendes SQL Script:

delete FROM wp_posts WHERE post_type = 'revision'

Führen Sie den vorherigen SQL Befehl auf Ihrer entsprechenden WordPress Datenbank aus. Dafür können Sie z.Bsp. die kostenlose und Open Source Datenbankverwaltung “phpMyAdmin” nutzen. Achten Sie dabei darauf, dass Sie ggf. den Prefix der Tabelle (hier: “wp_”) anpassen müssen. Das ist jedoch nur dann erforderlich, wenn Sie bei der Installation einen eigenen Prefix gewählt haben. Sollten Sie sich nicht sicher sein, können Sie den SQL Befehl trotzdem ausführen – ist die Tabelle nicht vorhanden, erhalten Sie eine entsprechende Fehlermeldung und keine Daten wurden gelöscht.

Wenn Sie sich zuvor die zu löschenden Daten ansehen möchten, dann hilft Ihnen dieser SQL Befehl weiter:

SELECt * FROM wp_posts WHERE post_type = 'revision'
22. Jul 2010
Teaser

WordPress: Fehler beim Laden des Stylesheets: Ein unbekannter Fehler ist aufgetreten (805303f4)

Wenn Sie bei Ihrem WordPress auch das Plugin “Google XML Sitemaps” benutzen, stehen Sie nach dem Update auf Version “3.2.4” des Plugins vor einem kleinen Problem. Leider bekommen Sie es bewußt nicht immer mit sondern merken es erst nach einer Überprüfung z.Bsp. in den Google Webmaster Tools:

Ihre (vom Plugin generierte) XML Datei ist nicht erreichbar:

Fehler beim Laden des Stylesheets: Ein unbekannter Fehler ist aufgetreten (805303f4)

Teilweise tritt dieses Problem nur bei einer Domain auf – die Hauptdomain (oder erste Domain) läuft relativ ungestört weiter. Für Google und andere Suchmaschinen (Crawler) ist das kleine Problem jedoch massiv, denn sie können Ihre XML Sitemap nicht mehr (richtig) verarbeiten. Dadurch kann es zu plötzlich fehlenden Links und Einträgen in den Suchmaschinen bzgl. Ihrer Webseite kommen. Hintergrund ist ein Problem mit der Verlinkung auf die hinterlegte XSL Datei.

Lösung:

Benennen Sie die Daten “sitemap.xsl” im Verzeichnis “/wp-content/plugins/google-sitemap-generator/” einfach um. Ohne diese Daten erzeugt das Plugin die XML Sitemap wieder fehlerfrei und Google kann wieder alles lesen.

Beispielbefehl für Linux:

mv sitemap.xsl sitemap.xsl.old

In Ihrem FTP Programm können Sie die Datei einfach umbenennen. Häufig ist diese Funktion auf die Taste “F2” gelegt.

Wichtig für eine schnelle Korrektur:

Erzeugen Sie nach der Umbenennung der XSL Datei Ihre XML Sitemap neu. Gehen Sie dafür in Ihrem WordPress Backend (Administrationsbereich “/wp-admin/”) auf “Einstellungen” > “XML-Sitemap”. Dort klicken Sie auf “… von Hand neu erstellen”. Danach ist die korrigierte XML Daten für die Suchmaschinen verfügbar.

13. Jul 2010
Teaser

WordPress: “Du hast nicht ausreichend Rechte, um auf diese Seite zuzugreifen”

Nach dem Kopieren oder Update Ihrer WordPress (WP) Installation erhalten Sie eine der beiden folgenden Meldungen nach der Anmeldung im Backend (wp-admin):

Du hast nicht ausreichend Rechte, um auf diese Seite zuzugreifen.
Sie haben nicht ausreichend Rechte, um auf diese Seite zuzugreifen.

Diese Fehlermeldung zeigt an, dass das WP Backend (Adminbereich) Ihre Anmeldung nicht richtig zuordnen kann. Die Gründe für diese Sperre können vielfältig sein. In der folgenden Übersicht möchten wir Ihnen die Lösung für die häufigsten Sperren zeigen:

  • Sie haben ein Upgrade / Update von WordPress gemacht

Versuchen Sie, Ihre Datenbank durch das “force-upgrade.php” Script zu aktualisieren. Dafür wird die Datei einfach in das Hauptverzeichnis Ihres Webservers kopiert und dann per Browser aufgerufen. Anschließend sollte die Datei dringend wieder gelöscht werden – nur dann kann niemand anderes ebenfalls diese Aktion ausführen. Dieser Schritt sollte fast alle vorhandenen Datenbankprobleme beseitigen. Zudem ist diese Methode wesentlich effizienter und sicherer als das manuelle Zurücksetzen der Versionsnummer / Versionsinformationen in der Datenbank.

  • Sie haben die Datei “wp-config.php” verändert

Überprüfen Sie, ob die Zeile

require_once(ABSPATH . 'wp-settings.php');

ganz unten steht. Wichtig ist auch, dass die Information

define('SECRET_KEY', 'xyz...abc');

(logischerweise) oberhalb der Zeile stehen.

  • Sie haben den Tabellen-Prefix geändert

Es ist nicht ausreichend, die Datei “wp-config.php” anzupassen und in der Datenbank den Tabellenprefix zu ändern. In der WordPress-Datenbank sind Datensätze gespeichert, welche den alten (originalen) Tabellenpräfix darstellen. Diese Einträge müssen also ebenfalls abgepasst werden. Bei normalen Installationen von WordPress sind die folgenden Befehle für die Tabellen “wp_options” und “wp_usermeta” ausreichend:

UPDATE neuesPrefix_options SET option_name = REPLACE(option_name, 'altesPrefix_', 'neuesPrefix_');
UPDATE neuesPrefix_usermeta SET meta_key = REPLACE(meta_key, 'altesPrefix_', 'neuesPrefix_');

Bei Standardinstallationen sollten keine weiteren Einträge zum Prefix vorhanden sein. Sollten Sie jedoch weitere Datensätze finden, ändern Sie diese entsprechend ab und schreiben Sie uns gerne einen Kommentar zu diesem Artikel. Wir werden Ihre Hilfe dann für die nächsten Besucher einarbeiten.

  • Die Option “User Roles” wurde verändert (“prefix_user_roles”)

Sollte die Einstellung / Option “prefix_user_roles” verändert ist. Die Details dieser Option werden in einem sog. “serialisiertes Array” abgelegt. Dabei kann es scheinbar passieren, dass sich die einzelnen Informationen (Daten) so verändern, dass PHP das richtige Array mit den Einzeldaten nicht mehr richtig entschlüsseln kann. Dadurch hat Ihr WordPress dann natürlich keine Möglichkeit mehr, auf diese Einstellungen zuzugreifen. Die Folge ist, dass (sicherheitshalber) alle Benutzer ausgesperrt sind.
Sie können durch einen einfache PHP-Datei schnell prüfen, ob dieses Problem bei Ihnen zutrifft:

  • Erstellen Sie in Ihrem Hauptverzeichniss (root) Ihres WebServers eine PHP Datei mit folgendem Inhalt (z.Bsp. “chk.php”):
    prefix."user_roles") or 
      die ("Die Option '".$wpdb->prefix."user_roles' ist defekt.");
    echo("Die Option '".$wpdb->prefix."user_roles' ist scheinbar in Ordnung.");
    ?>
  • Rufen Sie die Datei in Ihrem Browser auf:
    http://ihre.domain/chk.php

Das kurze PHP-Script prüft, ob die Option “user_roles” bei Ihrer WordPress richtig gelesen werden kann. Sollte dabei irgendein Problem auftreten (Sie erhalten die Anzeige “Die Option ‘xyz_user_roles’ ist defekt.”), sollten Sie sicherheitshalber die gesamte Option neu setzen. Zwar gehen Ihnen dadurch alte Einstellungen verloren und müssen dann neu gesetzt werden, aber solange Sie Ihre Benutzerberechtigungen nicht verändert haben, sollte es keine Probleme geben.
Sie können die einzelnen Werte entweder direkt durch phpMyAdmin setzen oder Sie nutzen das folgende Script:

prefix."user_roles", $val);
?>

Den Wert noch einmal als reinen String (Zeichenkette) für die direkte phpMyAdmin Eingabe. Der folgende Text ist eine Zeile:

a:5:{s:13:"administrator";a:2:{s:4:"name";s:13:"Administrator";s:12:"capabilities";a:54:{s:13:"switch_themes";b:1;s:11:"edit_themes";b:1;s:16:"activate_plugins";b:1;s:12:"edit_plugins";b:1;s:10:"edit_users";b:1;s:10:"edit_files";b:1;s:14:"manage_options";b:1;s:17:"moderate_comments";b:1;s:17:"manage_categories";b:1;s:12:"manage_links";b:1;s:12:"upload_files";b:1;s:6:"import";b:1;s:15:"unfiltered_html";b:1;s:10:"edit_posts";b:1;s:17:"edit_others_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:10:"edit_pages";b:1;s:4:"read";b:1;s:8:"level_10";b:1;s:7:"level_9";b:1;s:7:"level_8";b:1;s:7:"level_7";b:1;s:7:"level_6";b:1;s:7:"level_5";b:1;s:7:"level_4";b:1;s:7:"level_3";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:17:"edit_others_pages";b:1;s:20:"edit_published_pages";b:1;s:13:"publish_pages";b:1;s:12:"delete_pages";b:1;s:19:"delete_others_pages";b:1;s:22:"delete_published_pages";b:1;s:12:"delete_posts";b:1;s:19:"delete_others_posts";b:1;s:22:"delete_published_posts";b:1;s:20:"delete_private_posts";b:1;s:18:"edit_private_posts";b:1;s:18:"read_private_posts";b:1;s:20:"delete_private_pages";b:1;s:18:"edit_private_pages";b:1;s:18:"read_private_pages";b:1;s:12:"delete_users";b:1;s:12:"create_users";b:1;s:17:"unfiltered_upload";b:1;s:14:"edit_dashboard";b:1;s:14:"update_plugins";b:1;s:14:"delete_plugins";b:1;s:15:"install_plugins";b:1;s:13:"update_themes";b:1;s:14:"install_themes";b:1;}}s:6:"editor";a:2:{s:4:"name";s:6:"Editor";s:12:"capabilities";a:34:{s:17:"moderate_comments";b:1;s:17:"manage_categories";b:1;s:12:"manage_links";b:1;s:12:"upload_files";b:1;s:15:"unfiltered_html";b:1;s:10:"edit_posts";b:1;s:17:"edit_others_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:10:"edit_pages";b:1;s:4:"read";b:1;s:7:"level_7";b:1;s:7:"level_6";b:1;s:7:"level_5";b:1;s:7:"level_4";b:1;s:7:"level_3";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:17:"edit_others_pages";b:1;s:20:"edit_published_pages";b:1;s:13:"publish_pages";b:1;s:12:"delete_pages";b:1;s:19:"delete_others_pages";b:1;s:22:"delete_published_pages";b:1;s:12:"delete_posts";b:1;s:19:"delete_others_posts";b:1;s:22:"delete_published_posts";b:1;s:20:"delete_private_posts";b:1;s:18:"edit_private_posts";b:1;s:18:"read_private_posts";b:1;s:20:"delete_private_pages";b:1;s:18:"edit_private_pages";b:1;s:18:"read_private_pages";b:1;}}s:6:"author";a:2:{s:4:"name";s:6:"Author";s:12:"capabilities";a:10:{s:12:"upload_files";b:1;s:10:"edit_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:4:"read";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:12:"delete_posts";b:1;s:22:"delete_published_posts";b:1;}}s:11:"contributor";a:2:{s:4:"name";s:11:"Contributor";s:12:"capabilities";a:5:{s:10:"edit_posts";b:1;s:4:"read";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:12:"delete_posts";b:1;}}s:10:"subscriber";a:2:{s:4:"name";s:10:"Subscriber";s:12:"capabilities";a:2:{s:4:"read";b:1;s:7:"level_0";b:1;}}}