Dieser Artikel hat sicherlich keine Allgemeingültigkeit, da Probleme bei WordPress sehr vielschichtig sein können. Oftmals führen fehlerhafte Plugins, unzureichende Verzeichnisrechte oder einfach eine falsche Bedienung zu den unterschiedlichsten Problemen. Außerdem ist dieser „Fehler“ auch nicht auf WordPress beschränkt und könnte theoretisch bei allen Content Management Systemen und PHP-Anwendungen auftreten.

Mein Supergau am heutigen Tag zeigte sich wie folgt:


Beim Neuanlegen bzw. Bearbeiten eines Artikels wurde dieser nur teilweise gespeichert. Die eigentlich gesetzten Haken für das Zulassen der Kommentare sowie Trackbacks und Pingbacks wurden nicht in der Datenbank gespeichert. Hier stand wirklich ein „closed“ bei comment_status und ping_status in der Tabelle posts. Aber auch weitere Elemente, z.B. in den Feldern des Plugins wpSEO, waren nach dem Speichern eines Artikels wieder leer.
Mehrere Tests haben gezeigt, dass erst eine Verwendung des Editors (egal ob visuell oder im Text-Modus) zu diesen Fehlern führte.

Natürlich habe ich WordPress nochmals händisch neu geupdatet, Plugins deaktiviert, eigene Anpassungen in der wp-config.php verworfen, zusätzliche Sicherheitsrichtlinien vorübergehend aus der Serverkonfiguration entfernt, den Browser gewechselt und so weiter und sofort.

Die Lösung stand letztendlich in den Serverlogs

ALERT – configured POST variable limit exceeded – dropped variable

In den error.logs von www.redirect301.de wurde ich schließlich fündig und keine 2 Minuten später war das Problem behoben.

[Sat Jan 26 16:49:18 2013] [error] [client 203.0.113.0] ALERT - configured POST variable limit exceeded - dropped variable 'meta[23252][key]' (attacker '203.0.113.0', file '/pfad/zum/webprojekt/wp-admin/post.php'), referer: http://www.redirect301.de/wp-admin/post.php?post=12345&action=edit

Kurz gegoogelt und im Blog von Giuseppe Urso stand es dann auch schwarz auf weiß: Der „Schutzengel des PHP-Kerns“ suhosin verhindert in der Standardeinstellung die Übertragung größerer Requests und fängt den vermeintlichen Angriff beim Speichern eines WordPress-Artikels ab.

Die Werte von der Suhosin-Extension anpassen

Wer seinen eigenen Server administriert, sollte in seiner php.ini nach der suhosin Ausschau halten. Die Suhosin-erweiterung könnte beispielsweise hier includiert sein. Bei einem Debian-/ Ubuntu-Server dürfte man sie unter /etc/php5/apache2/conf.d/suhosin.ini finden.

Hier müssen die folgenden beiden Werte erhöht werden (das Entfernen des Semikolons „;“ dabei nicht vergessen):

sudo edit /etc/php5/apache2/conf.d/suhosin.ini
suhosin.post.max_vars = 500
suhosin.request.max_vars = 500
sudo /etc/init.d/apache2 restart

Mit diesen Einstellungen wären nun serverweit die beiden Werte (post.max_vars und request.max_vars) von standardmäßig 200 auf 500 erhöht. Wer nicht gleich den ganzen Server auf größere Werte umstellen möchte, kann auch nur für den betroffenen Vhost diese Anpassung vornehmen.

Suhosin-Anpassungen ohne Zugriff auf die php.ini

Wer seine Konfiguration des virtuellen Hosts selbst anpassen oder zumindest erweitern kann, sollte es mit diesem Eintrag versuchen und anschließen den Apachen neu starten bzw. den automatischen Reload abwarten:

php_admin_value suhosin.post.max_vars 500
php_admin_value suhosin.request.max_vars 500

Manche Hoster lassen auch Änderungen per .htaccess-Datei zu. Hier wären diese beiden Zeilen hinzuzufügen:

php_value suhosin.post.max_vars 500
php_value suhosin.request.max_vars 500

Hat man auf all diese Bereiche keinen Zugriff, dann hilft es sicherlich beim Hoster anzurufen und mit ihm darüber zu sprechen. Nutzt die Kommentare bei Fragen, gern helfe ich – wenn ich kann – weiter.