Womit man so seinen Nachmittag verbringen kann. Alles fing damit an, daß der GeoURL Button unten rechts nicht mehr funktionierte. Die Tags waren drin, also an was konnte es liegen? Der GeoURL Support schlug vor, doch mal den W3 Validator auszuprobieren. Hä? Ich verwende doch Software von der Stange, aber warum nicht.. und siehe da, der Validator sagt, er könne mit Content-Type null nichts anfangen. Ich schaue in den Header des Themes, der Content-Type wird explizit gesetzt, genauso wie im Quellcode der Seite. Doch irgendwas ist komisch mit dem header.php..
Dann sehe ich es: In der ersten Zeile steht was völlig merkwürdiges:
<?php /**/eval(base64_decode('aWYoZnVuY3Rpb25 ...
Etwas primitive Tarnung, das Skript (ziemlich obfuscated) in einem Base64 String. Das wiederum rief ein in einem entlegen Winkel meiner Webseite plaziertes Skript auf, das wiederum eine 100kb Datei dekodierte und dann evaluierte. Was das genau tut habe ich noch nicht herausgefunden. Eins jedenfalls hat die Infektion geschafft: Alle meine PHP Seiten waren damit infiziert (.php5 Seiten aber nicht!) Das hatte anscheinend nichts mit WordPress zu tun. Dem Änderungsdatum zufolge war das bereits vor einem halben Jahr geschehen. Ich hatte nichts bemerkt!
Wie das ganze hereingekommen ist weiß ich leider noch nicht. Ich vermute, daß es an der sehr alten WordPress-Version vom Blauen Heft liegt, speziell den dort verwendeten Javascript Editor (in dessen Unterverzeichnis das "Mutter-Skript" untergebracht war).
Ich mußte das natürlich zum Anlaß nehmen beide Blogs auf WordPress 3.0 anzuheben, alle anderen PHP Skripte manuell zu bearbeiten und mal wieder kräftig aufzuräumen. Aufräumen ist ja immer eine super Sache. Man muß es nur ab und zu tun. Danach funktionierte auch der GeoURL Knopf wieder.
Zusammenfassung:
- Ab und zu in den PHP Quellcode schauen
- Regelmäßige Backups der Files und Datenbank
- Nie alte Versionen herumliegen lassen
Links dazu aus dem Web, hier und hier. Peinlich wenn man sich anschaut wie alt das schon ist..